SSH 터널을 통한 SSH 전달


30

내 상황 :

Me (로컬 호스트)-> 서버 A (ip : 100.100.100.100) => (서버 B (ip : 192.168.25.100), 서버 ....)

서버 b에 연결하려는 경우 실제 IP가 있기 때문에 서버에 SSH로 연결할 수 있습니다. 서버 b를 IP로 ssh합니다 (192.168.25.100)

예:

내 PC에서 :

ssh user@100.100.100.100

100.100.100.100에서

ssh user@192.168.25.100

이것은 ssh를 사용하여 서버 B로 안내합니다.

서버 b에 직접 연결하려면 어떻게해야합니까? 내가 어떻게 할 수 있습니까?

예:

내 oc에서 :

ssh@192.168.25.100

나는 다음을 시도했다 :

ssh -L 22:localhost:22 user@100.100.100.100

성공없이

답변:


30

문제는 리스너를 localhost에 바인딩하는 것입니다. 이미 듣고있는 sshd가 있습니다. ssh 연결을 통해 ssh 연결을 터널링하는 것은 완전히 합법적이며 항상 수행하지만 전달 리스너에 사용되지 않는 포트를 선택해야합니다.

시험

me% ssh user@100.100.100.100 -L 2201:192.168.25.100:22

그때

me% ssh localhost -p 2201

서버 B에 연결해야합니다 (이미 이미 바인딩되어 있지 않은 경우 : 2201, 다른 경우 다른 포트를 선택하십시오).


빠른 답변 감사합니다! 그러나 작동하지만 ssh (22) 대신 모든 연결을 전달할 수 있습니까?
tom91136

1
이는 포트 포워딩뿐만 아니라 찾고자하는 완벽한 VPN입니다. bodhizazen.net/Tutorials/VPN-Over-SSH에 vpn-over-ssh를 수행하는 방법에 대한 글이 있지만 A의 ssh를 통한 원격 루트 액세스가 필요합니다. 또는 OpenVPN 또는 다른 VPN 솔루션을 다시 볼 수 있습니다. 이 작업을 수행하려면 A에 대한 권한이 필요합니다.
MadHatter는 Monica

고마워요, 마지막으로, A에만 연결하고 싶다면 어떻게해야합니까?
tom91136

me% ssh user@100.100.100.100; 우리는 이미 그것을 다루지 않았습니까? 또는 "A에 대한 완전한 VPN을 원한다면 어떻게해야합니까?"라는 의미입니까?
MadHatter는 Monica

1
SSH를 통한 VPN을 원하는 사용자의 경우 서버에서 루트 액세스 권한이 없지만 Python이있는 경우 sshuttle을 시도 하십시오 .
André Paramés

23

프록시를 통해 내부 컴퓨터로 ssh를 전송하기 위해 ssh 포트 전달을 사용할 필요는 없습니다. 세 번째 컴퓨터에 ssh를 연결하기 위해 첫 번째 연결 서버에서 명령을 실행하는 ssh 기능을 사용할 수 있습니다.

ssh -t user@100.100.100.100 ssh user@192.168.25.100

-t옵션은 ssh가 pseudo-tty를 강제로 할당하므로 대화식 명령을 실행할 수 있습니다.

이것은 ssh 키와도 작동합니다. 머신 A에 개인용 및 공개 키가 있고 머신 B 및 C에있는 권한 부여 된 키 파일에 공개 키가있는 경우이 -A옵션을 사용 하여 인증 에이전트 연결을 전달할 수 있습니다 .


10

다른 솔루션을 사용했습니다. ProxyCommand옵션을 사용했습니다 (여기에서 ~/.ssh/config).

Host myinsidehost1 myinsidehost2 myinsidehost3
ProxyCommand ssh externalhost ssh %h sshd -i

이것은 포트 간 터널을 설정하지 않고 표준 stdin / out을 사용하여 ssh를 터널링합니다. 이 방법에는 실제로 세 개의 ssh 연결을 인증해야한다는 결점이 있습니다. 그러나 내부 호스트에 연결하려면 다음을 입력하십시오.

ssh myinsidehost2

... 따라서 해당 터널에 대한 IP 선택에 신경 쓸 필요가 없습니다.


1
이것은 내가 찾은 유일한 종류의 SSH 스태킹입니다. 나는 시도했습니다 corkscrew또는 nc( netcat)하지만 같은 원활이 같은 없음 작동합니다.
Phuong Nguyen

7

ssh 매뉴얼 페이지에 따르면 ProxyCommand가 올바른 방법입니다.

구문은 다음과 같습니다.

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

-W이 질문에 대한 답변이있을 때 해당 옵션이 존재 하는지 잘 모르겠습니다 . 하지만 ssh 클라이언트의 최신 버전으로, 나는의 조합에 동의 ProxyCommand하고 -W선호하는 방법입니다. 명령 행에서 사용하는 방법과의 섹션 예제를 모두 보여주는 컨텍스트를 추가하십시오 .ssh/config.
카스퍼 드

어떤 버전의 SSH에 -W명령이 있고 어떤 버전 이 없는지 알려주는 변경 로그 / 버전 정보를 어디에서 찾을 수 있습니까? 약간의 인터넷 검색이 저에게 빠른 답변을주지 못했습니다 ...
dmh

-WOpenSSH 5.4가 2010 년에 출시되었습니다. 따라서 대답은 예입니다. @kasperd
0xC0000022L

7

OpenSSH 7.3 (2016 년 말)부터 가장 쉬운 방법은 ProxyJump 설정입니다. 당신의 ~/.ssh/config:

Host B
  ProxyJump A

또는 명령 행, -J B.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.