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


14

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.


netcat이 필요하다는 결론이 필요합니까?
MountainX

그 것처럼 보입니다. 이 경우, 문제를 해결하면서 설치할 수 있었지만 항상 그런 고급 스러움이있는 것은 아닙니다.
Steve Bennett

netcat 없이이 작업을 수행 할 수 있었던 두 가지 방법은 아래 답변을 참조하십시오.
MountainX

답변:


13

netcat없는 SSH ProxyCommand

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 일에 업데이트 됨)

롤랜드 슐츠 100 % 크레딧 출처는 다음과 같습니다.
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
의견에 더 유용한 정보가 있습니다.


http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash http://www.linuxjournal.com/content 도 있습니다.
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack -4r1 우분투 /

업데이트 : 여기 Marco 의 새로운 내용이 있습니다.

~ / .ssh / config의 ProxyCommand와 관련하여 다음과 같은 줄이 있습니다.

ProxyCommand ssh gateway nc localhost %p

마르코는 말한다 :

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

결과는 다음과 같습니다.

ProxyCommand ssh gateway -W localhost:%p

8

큰 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 에서 on을 사용하여 명령을 실행합니다.

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

3

이것을 시도하십시오 :

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

잠깐, 내가 시도한 것과 어떻게 다른가요?
Steve Bennett

@SteveBennett 차이점은 두 번째 시스템뿐만 아니라 첫 번째 시스템에도 TTY를 할당하려고 시도한다는 것입니다.
Hauke ​​Laging

"유쾌하지만 도움이되지 않는"결과에서 언급 한 것과 정확히 같은 명령입니까?
Steve Bennett

@SteveBennett 나는 그것을 잘못 읽었습니다. 내 목표는 -t두 연결을 모두 가지고 있었고 잘못된 것으로 보았습니다. 내 답변을 편집했습니다.
Hauke ​​Laging

아 글쎄, 여전히 좋지 않다. 모든 조합을 시도했습니다.
Steve Bennett

-3

server1로 ssh'ing 한 다음 server2로 ssh'ing하는 다음 기술을 시도해 볼 수 있습니다.

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

이렇게하면 저에게 효과적입니다.


1
더 자세히 설명해주세요 ...이 명령의 기능과 답을 해결하는 것이 유용한 방법.
Tejas
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.