여러 SSH 연결 파일을 처리할 때 발생하는 일반적인 문제

여러 SSH 연결 파일을 처리할 때 발생하는 일반적인 문제

첫 번째 SSH 연결을 통해 직접 액세스할 수 없는 파일을 다운로드해야 하는 경우가 많습니다. 예를 들어, 저는 Windows 컴퓨터를 사용하고 있는데 LAN을 통해서만 액세스할 수 있는 다른 컴퓨터에 액세스하고 싶습니다. 이는 먼저 중간 머신에 연결하고 다음 머신에 SSH를 연결해야 함을 의미합니다.

첫 번째 시스템에서 파일을 사용할 수 있는 경우 pscp를 사용하여 쉽게 얻을 수 있습니다. 이 상황에서 SSH 포트 전달을 사용할 수 있습니까?

답변1

나는 .ssh/config다음 정의를 추가합니다:

Host SERVER-A
    ProxyCommand ssh SERVER-B nc -q0 %h %p 2> /dev/null

ssh그런 다음 일반적인 방법으로 or 를 사용하십시오 .scp

ssh user@SERVER-A

또는

scp file.tar.gz user@SERVER-A:~

SERVER-A이러한 구성은 SSH 라이브러리에 대한 연결을 설정할 때 발견됩니다. 연결하려면 일부 프록시 명령을 사용해야 한다고 ssh에 알려줍니다. 프록시 명령은 프록시 명령의 모든 출력을 지정된 포트, 해당 정의 및 매개변수 의 지정된 서버로 전달하는 명령(netcat)을 연결 SERVER-B하고 실행합니다 .nc%h%p

이 구조를 사용하면 키 인증을 사용할 수도 있습니다. 방금 두 서버의 클라이언트 컴퓨터에서 공개 콘텐츠를 복사했습니다: SERVER-ASERVER-B.

이러한 유형의 구성은 SSH 라이브러리(예 rsync: sftpGUI 클라이언트)를 사용하는 다른 애플리케이션과도 호환됩니다.

답변2

예, 이 경우 SSH 포트 전달을 사용할 수 있지만 이를 시도할 때 유효하지 않거나 잘못된 호스트 키에 대한 경고가 표시될 수도 있습니다. OpenSSH와 같은 일부 SSH 클라이언트는 도메인이나 IP별로 SSH 호스트 키만 추적하고 포트 번호를 포함하지 않습니다. PuTTY는 호스트 키를 사용하여 포트 번호를 기록하는 것으로 보이며, 각 호스트에서 사용하는 포트 번호와 일관성을 유지하는 한 이 문제는 발생하지 않습니다. PuTTY에 저장된 세션에 포트 전달을 추가하는 것이 좋습니다. 그런 다음 다른 세션을 저장된 세션으로 다양한 원격 호스트에 저장하고 pscp/psftp와 함께 사용할 수도 있습니다. 2220과 같이 높은 번호의 포트에서 전달을 시작한 다음 중간 호스트를 통해 전달해야 하는 각 호스트에 대해 해당 포트에서 1씩 늘릴 수 있습니다. intermediate원격 호스트의 포트 2220와 대상, 대상이 있는 포트 등 로컬 포트 ​​포워딩에 저장된 세션 에 추가한 remote1:22후 대상과 SSH 포트가 있는 세션과 대상과 SSH 포트가 있는 세션에 대한 세션을 생성합니다. 호스트의 pcsp/psftp 세션이 사용됩니다.2221remote2:22remote1remote2remote1localhost2220remote2localhost2221@session-name

이 문제는 SSH 호스트 키를 어떤 방식으로든 localhost와 연결하고 다른 컴퓨터로 전달되는 로컬 포트에 연결하려고 할 때 발생합니다. OpenSSH에서는 HostKeyAlias. ~/.ssh/config다음과 같이 항목을 추가했습니다 .

Host intermediate
HostName intermediate.example.org
LocalForward 2220 remote1.example.org:22
LocalForward 2222 remote2.example.org:22

Host remote1
HostName localhost
Port 2220
HostKeyAlias remote1.example.org

Host remote2
HostName localhost
Port 2221
HostKeyAlias remote2.example.org

하지만 제가 선호하는 해결책은 집과 직장 네트워크에 IPv6를 배포하여 더 이상 최종 목적지에 도달하기 위해 먼저 중간 서버에 연결하는 것에 대해 걱정할 필요가 없도록 하는 것입니다.

답변3

중간 시스템을 프록시로 사용할 수 있습니다. 그것이 있는지 확인하십시오인터넷 고양이( nc)설치하다. 다음 행을 입력하십시오 ~/.ssh/config( foo는 연결할 수 없는 시스템의 별명, foo.example.com은 중개 시스템에서 표시되는 이름, gateway.example.com은 중개 시스템).

Host foo
HostName foo.example.com
ProxyCommand ssh gateway.example.com nc %h %p

그런 다음 ssh foo연결할 수 없는 시스템에 연결이 이루어집니다(2개의 홉을 통해 이루어지지만 이는 완전히 투명합니다).

답변4

gelraen의 답변을 따르십시오.

.ssh/config, 열린 터널을 통해 TCP 전달만 수행하는 특정 가상 호스트 이름에 대한 프록시 명령을 설정합니다.

Host imag
ProxyCommand socat - tcp-connect:localhost:2022

ssh imag그런 다음 터널이 작동되면 를 사용하여 server-b:22에 연결할 수 있습니다.

socat이것이 바로 제가 사용한 것이고 netcat잘 작동할 것입니다. ;)

한 가지 흥미로운 점 ProxyCommand은 환경 변수를 삽입한다는 것입니다. 그러니... 한번 시도해 보세요.

관련 정보