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]
-t
ssh 명령을 다시 실행하는 것보다 훨씬 간단합니다.