내 설정은 다음과 같습니다.
- 노드
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"