如何執行儲存在變數中的多行 ssh 命令

如何執行儲存在變數中的多行 ssh 命令

上下文:我試圖在無法直接訪問的遠端計算機上執行一堆命令 - 我首先必須 ssh 到網關計算機,然後從那裡 ssh 並運行命令。

基本上我想要的是一種打包一組命令的方法,我可以透過任意數量的 ssh 層級傳遞這些命令。這可以做到嗎?我懷疑最好的答案是使用 scp 複製腳本,然後運行它,這是一個選項。

請注意,我使用主機名稱命令來顯示正在發生的情況 - 這不是我真正想做的!

從執行單一 ssh 的命令開始,並在那裡執行一組多行命令:

ssh gateway.my.company "
  hostname;
  hostname;
"

這很好用。輸出類似:

target_machine
target_machine

然後,我將命令集儲存在一個變數中,並將其傳遞給:

command="
  hostname;
  hostname;
"
ssh gateway.my.company $command

的輸出完全相同 - 兩個hostname命令都在目標上執行。

接下來,我新增額外的 ssh 躍點(到私人電腦):

ssh gateway.my.company ssh target_machine_ip $command

這次這兩個hostname命令在不同的機器上運行:

target_machine
gateway_machine

看來我可以透過將 cmd 括在轉義引號(即\"$command\")中來解決此步驟,但如果我這樣做,那麼我必須針對直接情況以不同的方式包裝它,因為ssh gateway.my.company \"$command\"不再有效

注意:我明白命令不應該儲存在變數中而是儲存在函數中,但由於我使用 ssh,一旦我 ssh 進入下一個伺服器,我聲明的任何函數都將不存在。

編輯:原來的問題省略了第二跳,抱歉!

答案1

你只是缺少一些引號:

ssh gateway.my.company "$command"

相關內容