Ssh

通過腳本使用 ssh 身份驗證自動執行 git pull(非互動式)

  • March 9, 2022

我有一堆執行 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' pullSSH 命令一樣呼叫 git,git 會將該標誌傳遞給 SSH。

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