![종료 코드 6으로 인해 sshpass가 실패했습니다.](https://linux55.com/image/98833/%EC%A2%85%EB%A3%8C%20%EC%BD%94%EB%93%9C%206%EC%9C%BC%EB%A1%9C%20%EC%9D%B8%ED%95%B4%20sshpass%EA%B0%80%20%EC%8B%A4%ED%8C%A8%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
내 설정은 다음과 같습니다.
- 노드
A
는 내가 시작하는 곳이다 - 노드
B
는 게이트웨이 시스템입니다. - 노드
C
는 목적지입니다.
From A
to에서 B
SSH 공개키 인증을 설정했는데, B
from to에서 C
그렇게 할 수 없습니다.
따라서 노드에서 A
다음 주문을 사용하고 실제로 다른 컴퓨터(Ubuntu 14.04)에서 작동합니다.
sshpass -p secretpass ssh -oProxyCommand="ssh -W %h:%p username@B" username@C
...그러나 다른 컴퓨터(Ubuntu 16.04 - 관련성이 있는지 의심스럽기는 하지만)를 사용하여 다른 위치에서 시도하면 호출은 sshpass
어떤 종류의 출력도 없이 즉시 반환되고 종료 코드(에서 얻음 echo $?
)는 6입니다.
더욱 당황스러운 점은 이러한 단계를 개별적으로 수행하면 성공한다는 것입니다.
A: $ ssh username@B (directly access B without being prompted for password)
B: $ ssh username@C (prompted for password, provided 'secretpass')
C: $ (reached my destination)
답변1
좋아요, 무엇이 문제인지 알겠습니다. 이 컴퓨터에서 이 스크립트를 처음 사용하므로 먼저 다음을 수행해야 합니다( 없이 sshpass
).
ssh -oProxyCommand="ssh -W %h:%p username@B" username@C
그런 다음 메시지가 표시되었습니다.
호스트 'C <프록시 명령에 대한 호스트 IP 없음>)'의 신뢰성을 확인할 수 없습니다.
RSA 키 지문은 SHA256:…입니다.
계속 연결하시겠습니까(Y/N)? 예
경고: 'C'(RSA)가 알려진 호스트 목록에 영구적으로 추가되었습니다.
...위 내용을 수락한 후에는 추가 질문 없이 질문에서 요청한 주문을 사용할 수 있었습니다.
따라서 이 실패는 주문이 한 번만 나타나는 진위 여부 프롬프트에 응답할 수 없기 때문입니다.
sshpass
매뉴얼 페이지(반환 값 섹션)에서:
다른 프로그램과 마찬가지로 sshpass는 성공 시 0을 반환합니다. 실패하면 다음 반환 코드가 사용됩니다.
[...]
6
호스트 공개 키를 알 수 없습니다. sshpass는 새 키를 확인하지 않고 종료됩니다.
답변2
처음에 지문을 승인하지 않고 작동하게 하려면 다음을 사용할 수 있습니다.
ssh ... -o "StrictHostKeyChecking=no"