2017-07-11 15 views
0

'local'、 'A'、 'B'の3つのマシンがあるとします。 「ローカル」と「A」のみが接続され、「A」と「B」が接続されます。そして、「ローカル」はA.sshのマルチレイヤーでリモートマシン上でコマンドを実行する適切な方法は何ですか

# I run ssh A "ssh B commands" frequently, so a function is created for have clearer code. 
run_on_B() { 
    ssh A "ssh B \"[email protected]\"" 
} 

run_on_B 'echo export PATH=\\\$HOME/bin:\\\$PATH >> \$HOME/.bash_profile' 

を経由してB上でコマンドを実行して欲しいssh経由でリモートマシン上でコマンドを実行するためのより良い方法はありますか? $HOMEまたは$PATHをここで逃げること間違いを犯すのは簡単です。

答えて

1

質問は実際にリモートコマンドを実行することではなく、クォートと複数レベルの解析についてです。このコマンドはスクリプトファイルの生成に使用されるためです。

の.bash_profileに追加する最後のコマンドであれば、

export PATH="$HOME/bin:$PATH" 

ファイル

echo 'export PATH="$HOME/bin:$PATH"' >> "$HOME"/.bash_profile 

ちょうど単一引用符 "

run_on_B 'echo '\''export PATH="$HOME/bin:$PATH"'\'' >> "$HOME"/.bash_profile' 
を取得し、エスケープリテラルとして渡すことを追加するためのコマンドすることができ

しかし、機能は書き換えられる可能性があります

run_on_B() { 
    ssh A 'ssh B '\'"$1"\' 
} 
関連する問題