스크립트를 통해 SSH 인증을 사용하여 git pull 자동화(비대화형)

스크립트를 통해 SSH 인증을 사용하여 git pull 자동화(비대화형)

Git을 통해 비대화식으로 자동 업데이트하려는 Ubuntu 20.04 Server를 실행하는 Raspberry Pi가 많이 있습니다.

스크립트는 다음을 수행합니다.

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 | ...연구에 따르면 보안상의 이유로 의도적으로 파이프를 허용하지 않습니다(따라서 작동하지 않습니다). 경고가 발생하는 원인이 무엇인지 잘 모르겠습니다. Git에서 호출하는 SSH인 것 같지만 무시하는 방법을 모르시나요? 꼭 사용할 필요는 없지만 ssh-add이것이 작동하도록 하는 방법입니다.

답변1

다음과 같은 다른 스크립트를 작성할 필요가 없습니다.예상되는, 당신이있을 때바닐라.

가장 쉬운 방법은 추가하는 것입니다.Github 호스트 키도착하다 .ssh/known_hosts

편집: 서버가 많고 사이트의 콘텐츠가 별도의 호스트 키가 아니기 때문에 이는 불가능합니다.

그렇지 않으면 다음을 사용할 수 있습니다.GitPython오토메이션

답변2

위의 @Wieland의 답변과 유사하지만 약간 더 좋습니다. 스크립트 호스트 키 확인을 비활성화하는 대신 연결을 시도하기 전에 SSH에 공개 키를 가져오도록 요청할 수 있습니다.

$ export MACHINE_IP=...
$ ssh-keyscan "$MACHINE_IP" | tee -a ~/.ssh/known_hosts
$ ./path/to/script

이것이 SSH 액세스(예: Ansible)가 필요한 CICD 워크플로를 설정하는 방법입니다. 이 경우 IP는 정적이므로 어딘가에 저장하고 ~/.ssh/known_hosts스크립트를 실행하기 전에 CICD 파이프라인이 이를 파일에 추가하도록 합니다.

IP 주소 대신 FQDN을 사용할 수도 있지만 호스트가 현재 또는 미래에 여러 IP 주소로 확인될 수 있는 동적 DNS 동작을 알고 있어야 합니다.

답변3

다음을 설정하여 SSH-through-git에 대한 호스트 키 확인을 비활성화할 수 있습니다 StrictHostKeyChecking=no.

이 옵션을 사용하면 사용자가 모든 새 호스트를 수동으로 추가해야 합니다. 이 플래그가 "no"로 설정되면 ssh는 자동으로 사용자가 알고 있는 호스트 파일에 새 호스트 키를 추가합니다.

(에서SSH 구성(5)). git -c core.sshCommand='ssh -o StrictHostKeyChecking=no' pullSSH 명령처럼 git을 호출 하면 git은 이 플래그를 SSH에 전달합니다.

관련 정보