上下文:我試圖在無法直接訪問的遠端計算機上執行一堆命令 - 我首先必須 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"