stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다.

stdin이 터미널이 아니기 때문에 의사 터미널이 할당되지 않습니다.

NC 없이 서버를 통해 자동 SSH 호핑을 설정하려고 합니다.

이는 명령줄에서 실행할 수 있습니다.

ssh -A gateway ssh steve@target

(SSH 에이전트에 공개 키를 추가했습니다.)

그러나 이를 ~/.ssh/config에 추가하면 다음이 수행되지 않습니다.

Host target
  User steveb
  ProxyCommand ssh -A gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

문제를 강제로 해결하려고 하는 것은 -t재미있지만 도움이 되지 않습니다.

ProxyCommand ssh -A -t gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

-t? 안좋다.

ProxyCommand ssh -A -t -t gateway ssh steve@targetip

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

가능합니까? 대부분의 튜토리얼(예:http://www.arrfab.net/blog/?p=246)을 권장합니다 nc.

답변1

netcat이 없는 SSH 프록시 명령

ProxyCommand는 호스트에 간접적으로만 액세스할 수 있는 경우에 유용합니다. netcat의 경우 비교적 진보적입니다.

ProxyCommand ssh {gw} netcat -w 1 {host} 22

여기서 {gw} 및 {host}는 게이트웨이 및 호스트에 대한 자리 표시자입니다.

그러나 게이트웨이에 netcat이 설치되지 않은 경우에도 가능합니다.

ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'

/dev/tcp는 표준 bash에 내장된 기능입니다. 이러한 파일은 존재하지 않습니다. Bash에 이 기능이 내장되어 있는지 확인하려면 다음을 실행하세요.

cat < /dev/tcp/google.com/80 

...게이트웨이에서요.

Bash를 사용하고 있는지 확인하려면 다음을 사용하세요.

ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"

ControlMaster에서도 작동합니다.

(배경 고양이를 정리하기 위해 Kill을 포함하도록 10월 22일 업데이트) (자리 표시자를 더 명확하게 만들고 /dev/tcp를 설명하기 위해 2011년 3월 3일 업데이트)

Roland Schulz에게 100% 크레딧을 제공합니다. 출처는 다음과 같습니다.
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
더 유용한 정보를 보려면 댓글을 확인하세요.

자세한 내용은 다음과 같습니다.
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack-4r1ubuntu/

고쳐 쓰다: 뭔가 새로운 것 같아요표시

다음 줄이 포함된 ~/.ssh/config의 ProxyCommand를 참조하세요.

ProxyCommand ssh gateway nc localhost %p

마르코는 이렇게 말했습니다.

최신 버전의 OpenSSH를 사용하는 경우 netcat이 필요하지 않습니다. nc localhost %p를 -W localhost:%p로 바꿀 수 있습니다.

결과는 다음과 같습니다.

ProxyCommand ssh gateway -W localhost:%p

답변2

작은 T가 아닌 큰 T.

-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation. 

내 스크립트는 이 메시지를 반환했지만 지금은 그렇지 않습니다.

/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system

authorized_keyother_system에서 다음 명령을 실행하도록 사용합니다 .

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 

답변3

시도 해봐:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip

답변4

다음 기술을 시도해 볼 수 있습니다. 먼저 SSH를 통해 server1에 연결한 다음 SSH를 통해 server2에 연결합니다.

$ ssh -t user1@server1 ssh -t user2@server2 

이와 같은 것이 나에게 효과적입니다.

관련 정보