# ansible 2.7.2
TASK [Gathering Facts] *********************************************************
fatal: [서버]: UNREACHABLE! => {
"changed": false,
"unreachable": true
}
MSG:
Failed to connect to the host via ssh: Shared connection to 서버 closed.
# 이와 같은 ansible issue 가 등록돼 있다.
https://github.com/ansible/ansible/issues/26359
# 뚜렷한 해결책은 없고 controlpersist timeout 을 늘리라 고만 한다.ㅠ
# ansible.cfg 에 ssh 옵션(man ssh_config 참고)
# TCP 커넥션 하나에 여러개의 ssh 커낵션 허용(multiplexing)을 여부
# yes: controlpath 로 설정된 소켓으로 연결을 기다린다. 이 소켓에 세션이 추가 될 수 있다.
# no: 새 소켓을 만들지 않고 controlpath 에 있다면 세션 추가해서 사용한다.
# auto: controlpath 소켓이 있으면 사용하고, 없으면 새 소켓을 만든다.
# ControlMaster=auto
# ssh 커넥션 유지 시간, 기본 단위는 초다.# m,s: x분,x초 만큼 커넥션 유지
# no: 클라이언트 커넥션 종료되면 바로 종료
# yes or 0: 커넥션 indefinitely(무한정) 유지
# ControlPersist=30m
[ssh_connection]
ssh_args = -o ControlMaster=auto -o ControlPersist=30m
# ssh 실패시 자세한 로그를 보기 위해 ansible -vvv 옵션을 주고 보면
# 에러 직전까지 여러번의 ssh 연결을 수행을 성공한다.
# 하지만 에러 직전의 ssh 커맨드가 실패하고 명령 옵션을 보면 다음과 같다.
ssh -C \
-o ControlMaster=auto \
-o ControlPersist=60s \
-o StrictHostKeyChecking=no \
-o KbdInteractiveAuthentication=no \
-o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey \
-o PasswordAuthentication=no \
-o User=ysoftman \
-o ConnectTimeout=10 \
-o ControlPath=/ysoftman/.ansible/cp/8a8131ca11
-tt ysoftman_server
'/bin/sh -c '"'"'/usr/bin/python /ysoftman/.ansible/tmp/ansible-tmp-1570416122.87-200449718228174/AnsiballZ_command.py && sleep
# 위를 실행하면 문제가 되는 에러가 발생한다.
Shared connection to ysoftman_server closed.
# 성공,실패의 차이를 보면 성공의 경우 -tt 옵션이 없었고,
# 실패의 경우에서 -tt 옵션을 빼고 실행하면 잘된다.
# 찾아보니 -t 옵션은 ssh 연결시 화면을 보기 위해 tty 를 할당한다.
# -tt 로 t 를 여러번 주면 강제 할당하게 된다.
# 참고로 -T 옵션으로 -tt 를 disable 할 수 있다.
# ansible.cfg 에 다음 옵션을 주면
# ssh -tt(tty 강제 할당) 옵션 비활성화한다.
[ssh_connection]
usetty = no
https://linux.die.net/man/1/ssh
https://docs.ansible.com/ansible/latest/plugins/connection/ssh.html
comments:
댓글 쓰기