답변:
기본적으로 ssh를 사용하여 원격 시스템에서 명령을 실행하면 TTY 가 원격 세션에 할당되지 않습니다. 이를 통해 TTY 문제를 처리하지 않고도 이진 데이터 등을 전송할 수 있습니다. 이것은에 실행 된 명령에 제공된 환경입니다 computerone
.
그러나 원격 명령없이 ssh를 실행하면 쉘 세션이 실행 중일 가능성이 있으므로 TTY를 할당합니다. 이것은 ssh otheruser@computertwo.com
명령에 의해 예상 되지만 이전 설명으로 인해 해당 명령에 사용 가능한 TTY가 없습니다.
쉘을 원한다면 computertwo
이것을 대신 사용하십시오. 이는 원격 실행 중에 TTY 할당을 강제합니다.
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
이것은 일반적으로 ssh 체인 끝에서 쉘 또는 기타 대화식 프로세스를 실행할 때 적합합니다. 데이터를 전송하려는 경우 추가하거나 추가 할 필요가 -t
없지만 모든 ssh 명령에는 다음과 같은 데이터 생성 또는 소비 명령이 포함됩니다.
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
SSH를 릴레이로 사용하는 더 좋은 방법이 있습니다 ProxyCommand
. 옵션을 사용하십시오 . 클라이언트 컴퓨터에 두 번째 컴퓨터에 로그인 할 수있는 키가 있어야합니다 (공개 키는 대부분의 상황에서 SSH를 사용하는 것이 좋습니다). 이것을 ~/.ssh/config
넣고 실행하십시오 ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
이다 netcat을 . 사용 가능한 여러 버전이 있습니다.
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.
따라서 hostB에 연결해야하지만 먼저 hostA를 거쳐야합니다. 일반적으로 나는
ssh hostA
[user@hostA ~]$ ssh hostB
나는 지금 이것을한다
ssh -J hostA hostB
[user@hostB ~]$
ssh
!