Ssh
通過腳本使用 ssh 身份驗證自動執行 git pull(非互動式)
我有一堆執行 Ubuntu 20.04 伺服器的樹莓派,我希望通過 Git 以非互動方式自動更新。
該腳本執行以下操作:
eval "$(ssh-agent -s)" ; ssh-add /home/michael/.ssh/terminal_github_deploy_key ; git -C /home/michael/terminal/src pull
該腳本實際上是在 Python 中,但與上面的等效:
cmds = [] cmds.append('eval "$(ssh-agent -s)"') cmds.append(f'ssh-add {HOME_DPATH}/.ssh/terminal_github_deploy_key') cmds.append(f'git -C {CHECKOUT_DPATH} pull') cmd = ' ; '.join(cmds) subprocess.check_call(cmd, shell=True)
它工作正常,只是它引發了這個互動式警告:
The authenticity of host 'github.com (140.82.121.3)' can't be established. ECDSA key fingerprint is SHA256:... Are you sure you want to continue connecting (yes/no/[fingerprint])?
根據研究,出於安全原因,它故意不接受管道(因此
yes | ...
不起作用)。我不確定是什麼引發了警告,我猜它是 SSH,被 Git 呼叫,但不知道如何忽略它?我不必使用ssh-add
,但這是我設法讓它工作的方式。
如果不用像expect 那樣編寫另一個腳本,您將無法在原版的情況下做到這一點。
最簡單的方法是將Github 主機密鑰添加到
.ssh/known_hosts
編輯:由於有很多伺服器,這是不可能的,該站點上的不是單獨的主機密鑰
否則,您也許可以使用GitPython自動執行該操作
您可以通過設置禁用 SSH-through-git 的主機密鑰驗證
StrictHostKeyChecking=no
:此選項強制使用者手動添加所有新主機。如果此標誌設置為“否”,ssh 將自動將新的主機密鑰添加到使用者已知的主機文件中。
(來自ssh-config(5))。如果你像
git -c core.sshCommand='ssh -o StrictHostKeyChecking=no' pull
SSH 命令一樣呼叫 git,git 會將該標誌傳遞給 SSH。