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-server
ssh
sftp
ただし、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