シームレスな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

関連情報