Linux

在多個伺服器上執行 Shell 腳本

  • January 20, 2018

是否可以在一台伺服器上執行 ksh/sh 腳本的一部分,然後 ssh 到另一台伺服器並繼續執行腳本的其餘部分?或者有解決辦法嗎?

我有一個使用者,每次訪問伺服器時都不需要對其進行身份驗證,因此我可以從一台伺服器跳到另一台伺服器,而無需任何鍵盤互動。

我已經嘗試過了,試圖將一些邏輯分離到另一個腳本中:

MYSCRIPT="nohup ksh myscript.ksh > mylog.log &"
ssh servername ${MYSCRIPT}

我試過了,但它似乎沒有在另一台伺服器上執行這個腳本。

上面的整個程式碼是for循環的一部分;我為伺服器列表執行相同的腳本。

出於測試目的,該列表有兩個伺服器;由於一些奇怪和扭曲的原因,只有最後一個(或第二個)伺服器腳本可以按我的預期工作。

所有伺服器都可以看到 myscript.ksh - 它對所有伺服器都是可見和可執行的。

聽起來您想在另一台伺服器上執行一系列命令,而無需多次登錄。為此,您可以執行以下操作:

local_command sequence
ssh remote-server << End-Of-File
       remote_command 1
       remote_command 2
       remote_command 3
End-Of-File

這將執行remote_command 1,當它完成時,執行remote_command 2,然後remote_command 3全部在遠端伺服器上

老實說,您的措辭有點含糊,但讓我們追踪可能的原因:

您所描述的內容應該可以正常工作,但請參閱ssh-copy-id原始碼以查找與您自己的腳本的差異(它是與 OpenSSH 捆綁在一起的 shell 腳本)。

您提到該命令在您的一台機器上不起作用,也許伺服器有不同的設置阻止腳本首先啟動。

另外,您提到了身份驗證,所以我想您正在使用無密碼公鑰身份驗證,並且您可能希望限制使用關聯密鑰授權的命令:請參閱第 1man sshAUTHORIZED_KEYS FILE FORMAT

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