SSH 및 Jumphost를 사용할 때 이상한 동작이 발생합니다. 머신 A에서 설정이 실행될 때(cygwin, OpenSSH_7.1p1, OpenSSL 1.0.2d 2015년 7월 9일) 머신 B에서는 작동하지 않습니다(OpenSSH_6.7p1 Ubuntu-5ubuntu1.3, OpenSSL 1.0.1f 2014년 1월 6일). Ansible은 배스천 호스트를 통해 원격 머신에 연결하려면 이 설정을 사용해야 합니다.
나는 다음을 가지고 있습니다ssh.config
Host bastion
HostName a.a.a.a
ProxyCommand none
UserKnownHostsFile known_hosts
Host *
User user
Port 22
ForwardAgent yes
ProxyCommand ssh [email protected] nc %h %p
PasswordAuthentication no
UserKnownHostsFile known_hosts
이러한 known_hosts
파일은 동일한 폴더에 있습니다.
부르다
ssh bastion -F ssh.config
두 컴퓨터 모두에서 작동합니다. 하지만
ssh [email protected] -F ssh.config
이는 A 머신에서만 작동하고 B 머신에서는 작동하지 않습니다.
The authenticity of host 'a.a.a.a (a.a.a.a)' can't be established.
ECDSA key fingerprint is ###.
프록시 명령을 다음으로 변경해 보았습니다.
ProxyCommand ssh [email protected] -F ssh.config nc %h %p
이로 인해 문제가 해결되었습니다.
ssh [email protected] -F ssh.config
이제 두 시스템 모두에서 실행되기 때문입니다. 그러나 구성도 rsync
Ansible에 의해 실행되며, 다른 기본 디렉터리에서 실행되므로 ssh.config
파일을 찾을 수 없습니다. 이식성을 위해 절대 경로를 사용하고 싶지 않습니다. 이러한 스크립트는 로컬 컴퓨터(일부 Windows에서는 함께 제공됨 cygwin
)에서 실행하거나 원격 에이전트를 사용하는 전용 빌드 서버를 통해 실행해야 합니다.
ProxyCommand
지금은 다음과 같이 설정했습니다 .
ProxyCommand ssh -o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no [email protected] nc %h %p
rsync
이것은 A+B에서 작동하지만 /problems 가 있습니다 ansible
. 로그는 다음을 제공합니다.
msg: Warning: Permanently added 'a.a.a.a' (ECDSA) to the list of known hosts.
호스트 키 확인에 실패했습니다.
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]
TL;DR 초기 구성은 호스트 키를 설정하는 데 수동 단계가 필요하므로 헤드리스로 작동하지 않습니다. 대안은 아래의 작업 흐름을 중단합니다( rsync
). 다른 옵션이 있나요?
답변1
호스트 키 보안을 "해결"할 수 있는 방법은 ssh-keyscan
이를 사용하여 파일을 만든 known_hosts
다음 호스트의 신뢰성을 수동으로 확인하지 않고도 연결할 수 있다는 것입니다.
다음과 같이 사용할 수 있습니다.
ssh-keyscan hostname > known_hosts
"약간" 보안이 손실되지만 신뢰할 수 있는 환경에서 실행되고 있다면 허용됩니다.