Bash

您可以在 bash 腳本中使用 ssh 嵌套遠端呼叫嗎?

  • September 17, 2018

我遇到了一個奇怪的問題,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[@]}"

引用自:https://unix.stackexchange.com/questions/469567