
我有一個 shell 腳本,它將在遠端伺服器上啟動一系列作業。我可以透過 ssh 連接到該伺服器(但它確實需要密碼!)並手動執行腳本,但某些步驟也在本地完成,因此我想避免手動 ssh 和執行操作。有沒有辦法自動 ssh/登錄,然後在更大的本地 shell 腳本中啟動命令?
答案1
如果您有許多命令要在遠端伺服器上執行,我建議您將它們建立為 shell 腳本,上傳一次,然後根據 ssh 命令執行一次。
確保您對該腳本具有執行權限,並且它不依賴從正常 shell 會話中獲得的任何信息,例如交互式登入腳本設定的變數或路徑,例如:.bashrc,因為這些不會運行透過遠端ssh 命令運行命令時。
另請記住檢查以確保檢查腳本的“返回”,以確保命令按預期完成。
答案2
若要在遠端主機上執行腳本/命令,請執行
ssh [<USER>@]<REMOTE_HOST> [-f] <REMOTE_COMMAND>
-f
如果您希望 ssh 立即轉到背景而不是等待命令完成,請新增該選項。
考慮到登錄,自動密碼識別通常是一個壞主意。如果您的設定確實無法產生私鑰/公鑰對(私鑰儲存在本機電腦上,公鑰儲存在遠端電腦上)並使用它進行身份驗證 - 正如上面評論中所建議的 - ,您將必須恢復到sshpass
可以透過以下方式啟動遠端會話/命令的工具:
sshpass -p <YOURPASSWORD> ssh [<USER>@]<REMOTE_HOST> [-f] [<REMOTE_COMMAND]
答案3
您可以使用公鑰/私鑰身份驗證來建立您的身份,ssh
而無需密碼。為此,您只需產生金鑰對 ( ssh-keygen
) 並將公鑰新增至伺服器的使用者 ~/.ssh/authorithed_keys 檔案。
#!/bin/bash
ssh user@server RemoteCommand #man ssh for more info
local command1
local command2
.....