SSH 게이트웨이 연결을 통한 SCP


8

내 네트워크 레이아웃은 다음과 같습니다.

이제 Alice는 다음을 사용하여 SSH 게이트웨이 (지금부터 게이트웨이 만)에 액세스 할 수 있습니다.

ssh alice@external.ip

게이트웨이의 인증 된 키 파일은 다음과 같습니다.

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

따라서 Alice가 개인 키로 게이트웨이에 연결하려고하면 실제로 웹 서버에 연결됩니다 (게이트웨이 PC는 암호가없는 개인 키를 사용하여 웹 서버에 연결하여 투명하게 유지됨).

질문

  1. Alice가 웹 서버에 물건을 scp 할 수 있도록 이것을 어떻게 설정할 수 있습니까?

  2. 나는 이것이 별도의 연결을 만든다는 것을 알고 있지만 이것이 정상적인 ssh로 작동하여 비슷한 -R12345:localhost:22것이라도 작동 할 수있는 방법이 있습니까?

답변:


10

다른 ssh 서버 뒤에있는 ssh 서버에 액세스하려면 "ProxyCommand"를 사용하십시오. 예 : .ssh / config에 추가

Host Alice  
   User myLoginAtAlice # optional 
   ProxyCommand ssh -o Compression=no gateway netcat -w 90 %h %p
   ServerAliveInterval 30
   Compression yes

Host gateway
   HostName gateway.public.ip
   User myLoginAtTheGateway # optional 
   Compression yes

그런 다음 "Alice"를 호스트 이름으로 사용하여 "ssh Alice"또는 "rsync"또는 "scp"를 간단히 사용할 수 있습니다. 마술은 클라이언트에게 숨겨져 있습니다.

이를 통해 네트워크 토폴로지 / 구성이 변경되는 경우 ssh를 신속하게 재구성하고 모든 스크립트를 변경하는 대신 .ssh / config를 변경할 수 있습니다.

설명 : ssh는 직접 TCP 연결 대신 "proxy command"로 제공된 명령을 전송으로 사용합니다. Netcat은 수백만 개의 다른 기능 중 stdin / stdout을 지정된 원격 호스트로 리디렉션하는 네트워크 도구입니다. 따라서 "ssh gateway nc sshserver 22"는 해당 시스템의 ssh 서버에 연결합니다. % h는 호스트 이름이고 % p는 포트입니다. 이러한 설정을 통해 ProxyCommand 라인을 변경하지 않고 포트를 변경하기 위해 "포트 N"을 지정할 수 있습니다.

암호화되거나 압축 된 데이터를 압축해도 더 이상 데이터 볼륨이 줄어들지 않으므로 최종 컴퓨터에 대한 압축을 활성화하고 외부 압축을 비활성화합니다. 압축 설정을 다루는 것은 물론 선택 사항입니다.


또 다른 질문은 게이트웨이 시스템에 대한 사용자 정의 포트가 있으면 rysnc는 그렇게 작동하지 않습니다. 그것에 대한 생각.
zidarsk8

.ssh / config의 관련 섹션에 "Port port_number"를 추가하십시오. ssh_config 및 sshd_config 매뉴얼 페이지를 읽으십시오. 그들은 많은 정보를 가지고 있으며 당신에게 많은 영감을 줄 수 있습니다.
Raúl Salinas-Monteagudo

다른 포트를 지정하면 rsync가 작동하지 않습니다. 연결이 정상적으로 작동하도록 포트를 구성했지만 rsync로 인해 문제가 발생했습니다.
zidarsk8

3

나는 이것과 정확히 같은 문제가 있었지만 모든 것을 근본적으로 바꾸지 않고 작동하도록했습니다.

내가 한 것은 $ SSH_ORIGINAL_COMMAND를 게이트웨이 trusted_keys에 추가하여 체인을 통해 최종 서버로 무엇이든 전달하는 것입니다.

그래서 이건:

#/home/Alice/.ssh/authorized_keys
command="ssh -t alice@web" ssh-rsa ABCD...E== alice@somehost

된다 :

#/home/Alice/.ssh/authorized_keys
command="ssh -q -t alice@web $SSH_ORIGINAL_COMMAND" ssh-rsa ABCD...E== alice@somehost

-q는 엔드 포인트 시스템에서 연결 종료 메시지를 억제하는 데 사용되므로 로컬로 경로 재 지정을 사용하는 경우 로컬 출력으로 끝나지 않습니다.

그런 다음 scp를 다음과 같이 사용할 수 있습니다.

scp localFileName alice@exernal.ip:/path/on/end/point/remoteFileName

이는 사용자가 명령을 통해 명령을 엔드 포인트 서버로 전달하고 결과를 로컬 세션에서 다시 가져 와서 파일로 리디렉션하거나 다른 프로그램으로 파이프 할 수있게하는 이점이 있습니다.

예를 들면 다음과 같습니다.

ssh -t alice@external.ip "ls -l" > tmp

이것은 sshd가 환경 변수 $ SSH_ORIGINAL_COMMAND를 ssh 클라이언트가 지정한 명령으로 채우는 것처럼 보이지만 왜 이것이 scp가 명령뿐만 아니라 엔드 포인트 시스템으로 기적적으로 통과하도록 허용하는지 확실하지 않습니다.


0

불행히도 포트 포워딩은 Alice의 워크 스테이션에서 웹 서버로 파일을 직접 복사하는 데 도움이되지 않습니다 scp. 에서 이 SO 포스트 (이 같은 인증 메커니즘을 활용으로하고 SCP) 나는 연결 포트 전달 사용하여 ssh를 작동하지 않습니다 왜 SSH를 설명했다.

옵션은 이제 SSH 게이트웨이 역할을하는 머신에서 VPN 서버를 설정하고 연결 한 다음 방화벽 뒤에있는 머신에 직접 액세스하는 것입니다.

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