.png)
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' pull
SSH 명령처럼 git을 호출 하면 git은 이 플래그를 SSH에 전달합니다.