Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 通过多层ssh在远程机器上运行命令的正确方法是什么_Bash_Ssh - Fatal编程技术网

Bash 通过多层ssh在远程机器上运行命令的正确方法是什么

Bash 通过多层ssh在远程机器上运行命令的正确方法是什么,bash,ssh,Bash,Ssh,假设有3台机器:“本地”、“A”和“B”。仅连接“本地”和“A”,且连接“A”和“B”。“本地”希望通过A在B上运行命令 # I run ssh A "ssh B commands" frequently, so a function is created for have clearer code. run_on_B() { ssh A "ssh B \"$@\"" } run_on_B 'echo export PATH=\\\$HOME/bin:\\\$PATH >> \

假设有3台机器:“本地”、“A”和“B”。仅连接“本地”和“A”,且连接“A”和“B”。“本地”希望通过A在B上运行命令

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

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

有没有更好的方法通过ssh在远程机器上运行命令?我觉得在这里转义$HOME或$PATH很容易出错。

问题不在于运行远程命令,而在于引用和多级解析。因为该命令用于生成脚本文件

如果要附加到.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"\'
}