원활한 SFTP 터널/점프 박스

원활한 SFTP 터널/점프 박스

gateway server사용자가 SSH/SFTP(SFTP 우선, SSH는 좋음)에 연결하고 해당 gateway서버가 사용자가 연결하려는 사용자 이름과 개인 호스트로 식별되는 내 네트워크 내의 개인 서버로 사용자를 라우팅하도록 하는 방법 을 설정하려고 합니다 . 이는 원활한 사용자 환경이어야 합니다. 즉, 특별한 구성 파일 설정이 없고 명령줄 세션에 대한 플래그가 없으며 Filezilla와 같은 UI 도구의 특별한 설정이 없어야 합니다.

지금까지 내가 한 일은 서버 sshd_config의 파일 에 이 블록을 추가하는 것뿐입니다 gateway.

Match User someuser                                                                                                                                                                                                                               
   ForceCommand sftp  -i /home/someuser/.ssh/id_rsa someuser@some_other_server

이제 클라이언트 컴퓨터에서 이 작업을 수행하면 완벽하게 작동합니다.

ssh -i id_rsa someuser@gateway_server_machine

그것은 ForceCommand기계에 대한 SFTP 세션을 트리거하고 제공합니다 some_other_server.

하지만

내가 할 때sftp -i id_rsa someuser@gateway_server_machine

연결이 중단되고 결국 종료됩니다.

따라서 세부 정보가 있어도 sftp는 어떤 정보도 제공하지 않습니다. 단지 거기에 멈춰 있을 뿐입니다. 그러나 이것이 서버 측에서 얻은 것입니다.

debug1: subsystem: internal-sftp
Starting session: forced-command (config) 'sftp  -i /home/someuser/.ssh/id_rsa someuser@some_other_server ' for someuser from 10.16.2.149 port 58822 id 0

SSH에서는 다음을 얻습니다.

Starting session: forced-command (config) 'sftp  -i /home/someuser/.ssh/id_rsa someuser@some_other_server ' on pts/1 for someuser from 10.16.2.149 port 33550 id 0
debug1: Setting controlling tty using TIOCSCTTY.

여기서 내가 뭘 잘못하고 있는지, 아니면 사용자에게 이 연결을 제공하는 더 좋은 방법이 있는지 알아내야 합니다.

답변1

ForceCommand sftp -i /home/someuser/.ssh/id_rsa someuser@some_other_server

위의 내용은 SFTP를 시작합니다고객중간 서버와 그텍스트상호 작용. 로컬 SFTP 클라이언트( sftp또는 다른 클라이언트)가 통신할 수 없습니다. 소요된다바이너리SFTP규약. 이는 클라이언트 ssh로 작동하는 것처럼 보이는 이유도 설명합니다 . sftp그러나 그것은 진실이 아니다. 이는 단순히 클라이언트의 텍스트 인터페이스를 sftp중개 서버로 연결합니다.


당신에게 필요한 것은 이것이다:

ForceCommand ssh -s sftp -i /home/someuser/.ssh/id_rsa someuser@some_other_server

이를 통해 (대부분의) 원격 서버가 SFTP를 시작할 수 있습니다.섬기는 사람(-s sftp) 및 파이프를 통한 중간 서버바이너리SFTP 프로토콜은 앞뒤로 전송합니다( 로컬 파이프의 중간 텍스트 입력/출력을 설정하는 것과 동일한 방식으로 ssh리모콘의 바이너리 입력/출력만 파이핑 ).sftp-serversshsftp


그러나 SFTP와 SSH가 모두 필요한 경우 다음을 사용해야 합니다.Subsystem지시하다SFTP의 경우 다음이 아닙니다 ForceCommand.

Subsystem sftp ssh -s sftp -i /home/someuser/.ssh/id_rsa someuser@some_other_server

또는 SSH 및 SFTP용 터널을 별도로 복제하지 않으려면 SSH_ORIGINAL_COMMAND환경 변수를 사용하여 사용 여부를 결정할 수 있습니다 -s sftp.

sftp-server(대부분의) 원격 SFTP 서버에도 OpenSSH가 있고 중간 서버와 동일한 바이너리 경로가 있다는 것을 실제로 알고 있다면 여기에는 SSH와 SFTP가 모두 포함되어야 합니다.

ForceCommand ssh -i /home/someuser/.ssh/id_rsa someuser@some_other_server $SSH_ORIGINAL_COMMAND

관련 정보