SSH 내부 SSH가 "stdin: not a tty"로 인해 실패합니다.

SSH 내부 SSH가 "stdin: not a tty"로 인해 실패합니다.

SSH를 사용하여 한 컴퓨터에 연결한 다음 SSH를 사용하여 다른 두 컴퓨터에 연결하려고 시도했지만 이 오류가 발생합니다.

ssh [email protected] 'ssh [email protected]'

stdin: is not a tty

왜?

답변1

기본적으로 SSH를 사용하여 원격 시스템에서 명령을 실행하면텔레타이프라이터원격 세션에 할당되지 않았습니다. 이를 통해 TTY 문제를 처리할 필요 없이 이진 데이터 등을 전송할 수 있습니다. 에서 실행되는 명령에 제공되는 환경입니다 computerone.

그러나 원격 명령 없이 ssh를 실행하면 아마도 셸 세션을 실행 중이므로 TTY가 할당됩니다. 이는 명령에서 예상되는 것이지만 이전 설명으로 인해 명령에 사용할 수 있는 TTY가 없습니다.ssh [email protected]

top 에서 쉘을 사용하려면 computertwo다음을 사용하십시오. 그러면 원격 실행 중에 TTY 할당이 강제됩니다.

ssh -t [email protected] 'ssh [email protected]'

이는 일반적으로 SSH 체인 끝에서 셸이나 기타 대화형 프로세스를 실행하게 될 때 적합합니다. 데이터를 전송하려는 경우 추가는 적절하지도 필수도 아니지만 -t모든 ssh 명령에는 데이터 생성 또는 소비 명령이 포함됩니다. 예를 들면 다음과 같습니다.

ssh [email protected] 'ssh [email protected] "cat /boot/vmlinuz"'

답변2

SSH를 릴레이로 사용하는 더 좋은 방법이 있습니다. 이 ProxyCommand옵션을 사용하세요. 두 번째 컴퓨터에 로그인하려면 클라이언트 컴퓨터에 키가 있어야 합니다. 어쨌든 공개 키는 대부분의 경우 SSH를 사용하는 데 권장되는 방법입니다. 그것을 당신의 것에 넣고 ~/.ssh/config실행하십시오 ssh computertwo.

Host computerone
HostName computerone.com
User user

Host computertwo
HostName computertwo.com
User otheruser
ProxyCommand ssh computerone exec nc %h %p

nc인터넷 고양이. 사용 가능한 모든 버전이 가능합니다.

답변3

중간 서버의 tty 장치에 대화형 터미널이 있어야 합니다.

이 명령을 시도하면 작동합니다.

ssh user@computer1 -t "ssh otheruser@computer2"

man ssh리소스 의 옵션을 참조하세요 -t.

답변4

SSH에서 PROXY Jump 옵션을 사용할 수 있습니다.

-J [user@]host[:port]
 Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there.  Multiple jump hops may be specified
 separated by comma characters.  This is a shortcut to specify a ProxyJump configuration directive.

따라서 호스트 B에 연결해야 하지만 거기에 도달하려면 먼저 호스트 A를 거쳐야 합니다. 보통은 그럴 거야

 ssh hostA
 [user@hostA ~]$ ssh hostB

지금은 이걸 해요

ssh -J hostA hostB
[user@hostB ~]$

,여러 호스트를 분리 할 수도 있습니다.

ssh -J hostA,hostB hostC
[user@hostC]

-tssh 명령을 다시 실행하는 것보다 훨씬 간단합니다.

관련 정보