호스트에 연결하고 싶고 screen을 사용하여 ansible 플레이북을 실행하겠습니다. screen을 사용하면 SSH 연결이 중단되거나 종료되는 경우 스크립트를 완료할 수 있습니다. 지금까지는 문제가 없습니다.
내 Ansible 호스트는 인벤토리 파일의 호스트에 연결하기 위해 비밀번호 또는 SSH 키가 필요합니다. 따라서 Ansible 인스턴스에 연결할 때 새 개인 키를 생성하는 대신 SSH 에이전트 전달을 사용합니다.
# from my macOS
ssh-add -K
ssh -A ansible-host
# from ansible-host
screen -R run-playbook-example
ansible-playbook -i inventory/hosts my-playbook.yml
여태까지는 그런대로 잘됐다. 끊어진 연결을 시뮬레이션할 때까지요. 이는 또한 프록시 전달이 더 이상 작동하지 않으며 ansible-host가 어떤 호스트에도 인증할 수 없음을 의미합니다. 이는 화면 사용의 요점을 모두 무너뜨립니다.
둘 다 할 수 있는 방법이 있나요? 1) 새 SSH 개인 키를 생성하여 Ansible 호스트에 저장하지 말고 SSH 에이전트 전달 또는 기타 트릭을 사용하십시오. 2) Ansible 호스트에 대한 SSH 연결이 끊어질 염려 없이 화면에서 실행할 수 있습니다. 연결이 끊어졌습니다.
뭔가 이것이 불가능하다고 말해줍니다. 하지만 저는 화면을 사용하고 SSH 연결 문제로부터 안전할 수 있도록 여러 사람이 액세스할 수 있는 개인 키를 저장해야 하는 것을 정말 싫어합니다. 이 문제를 해결할 수 있는 아이디어, 팁, 다른 방법이 있나요?
답변1
이 솔루션에 관심이 있는 사람은 SSH 구성에 다음 옵션을 추가해야 합니다. 이를 SSH 멀티플렉싱이라고 하며 재사용을 위해 SSH 연결을 저장합니다.
Host *
Controlmaster auto
Controlpath /tmp/ssh-%r@%h:%p
ControlPersist yes
따라서 이제 ansible이 실행 중인 호스트의 screen 세션 연결을 끊으면 기존 SSH 연결이 계속 실행되고 재사용됩니다(연결을 끊기 전에 설정된 경우).