Bash
您可以在 bash 腳本中使用 ssh 嵌套遠端呼叫嗎?
我遇到了一個奇怪的問題,
Computer A
可以看到Computer B
,可以Computer B
看到Computer C
,但Computer A
看不到Computer C
。我想製作一個可以在其上執行的 bash 腳本,該腳本將在 上
A
呼叫任意命令C
,但我似乎無法讓雙引號正常工作。這個想法是:AMB_CMD='source eniron.dat; cd path/to/code/; make clean all' ssh -t username@ComputerB "ssh -t username@ComputerC "$AMB_CMD""
我認為解決要執行的內容
B
會修復它,如下所示:AMB_CMD='source eniron.dat; cd path/to/code/; make clean all' B_CMD=ssh -t username@ComputerC "$AMB_CMD" ssh -t username@ComputerB "$B_CMD"
但我仍然有問題。
據我所知,不需要引用實際命令。
ssh username@ComputerB ssh username@ComputerC make clean all
或者,
ssh -J username@ComputerB username@ComputerC make clean all
這將
ComputerB
用作連接到ComputerC
.使用 OpenSSH 7.3+,配置選項
ProxyJump
允許您在以下位置配置跳轉主機~/.ssh/config
:Host ComputerC User username ProxyJump username@ComputerB
…因此命令將簡化為
ssh ComputerC make clean all
根據您的問題實際包含的內容(問題中沒有提到錯誤消息),它可能與
make
在錯誤目錄中執行有關。要cd
在執行之前進入正確的目錄,make
請使用該實用程序的-C
選項:ssh username@ComputerC make -C path/to/build/dir clean all
此外,如果要將實際命令儲存在變數中,則不要在其中使用單個字元串,
bash
而是在數組中使用:cmd=( make -C "path/to/build/dir" clean all ) ssh ... "${cmd[@]}"