2017-02-07 5 views
0

新しいSFTPサーバーを作成しようと考えています。現在のSFTPサーバーは、すべてのセッションで開始されます。 SFTPのユーザーが3人いる場合は、3つのSFTPサーバーがあります。それは私が望むものではありません。すべての新しいSFTPセッションが接続されているサーバーが1つ必要です。これを行う方法?新しいSFTPサブプロセスを開始するのではなく、既存のSFTPサーバーに接続する

SFTPセッションを開始するためにサーバーにログインすると、SSHプロセスが開始され、SFTPサブシステムも開始されます。 SSHプロセスは暗号化などの処理を行います.IOはSFTPプロセスの標準ポート0,1,2(stdin、stdout、stderr)を通して行われます。

これは、セッションごとに専用のSFTPプロセスがある場合にすべて動作します。しかし、接続したいSFTPサーバが1台ある場合、どうすれば動作させることができますか? "ssh-to-sftp-connect-agent"を介して?

詳細情報:

私はOpenSSHので使用されているバージョン3、より優れているのSFTPバージョン6を、使用したいです。 opensshのコミュニティは彼らのSFTPの実装をアップグレードする必要はありません。

https://bugzilla.mindrot.org/show_bug.cgi?id=1953

非常に優れたオープンソースのSFTPサーバがである:

http://www.greenend.org.uk/rjk/sftpserver/

と非常に便利概要:

http://www.greenend.org.uk/rjk/sftp/sftpversions.html

このサーバーは、sftpプロトコルを使用していますしかし、(b)aclのロックとハンドリングは実装されていません。これらの共有テーブルを実装するには、アクセスフラグが設定されているすべてのオープンファイルとwho for(b)ロックが動作するためのブロックモードが必要です。すべてのSFTPセッションを持つ別のプロセスにつながるとき:

Subsystem  sftp /usr/libexec/gesftpserver 

(あなたは3よりも高い任意のプロトコルを使用したい時に避けられないもの) 、共有データベースはロックとACLのを処理するためのsollutionです。 もう1つの解決策は、新しいsftpセッションがすべて、ブート時に起動される既存の「スーパー」sftpサーバーに接続することです。同時アクセス、ロックなどはプログラムするのがずっと簡単です。

HOWTOは、この行でこれを行う:

Subsystem  sftp /usr/libexec/exampleconnectagent 

を理想的な場合には、エージェントが接続してSFTPサーバ、および終了のための専用のsshプロセスとの間の接続を可能にします。 長い話、これは可能ですか?私はここで説明したFDのの通過を使用する必要があります:

Can I share a file descriptor to another process on linux or are they local to the process?

感謝を事前に。

追加: 私はサーバソケットをリスニングしているsftpファイルサーバに取り組んでいます。クライアントは直接ストリームローカル機能を使用して接続し、opensshのチャネルに接続することができます。この方法では、すべてのクライアントに1つのサーバープロセスを持たせることができます。これが私が最初に望んでいたものです。

答えて

2

現在のSFTPサーバーは、すべてのセッションで開始されます。

「現在のSFTPサーバー」の意味は??特にどちらですか?

OpenSSH(最も広く使われているSSH/SFTPサーバー)は、実際にSFTPセッションごとに新しいサブプロセスを開いていました。そしてそれにはほとんど問題はありません。最近のバージョンでは、それ以上はありません。 (新しい)デフォルト構成では、インプロセスSFTPサーバー(別名internal-sftp)が使用されます。

OpenSSH: Difference between internal-sftp and sftp-serverを参照してください。


本当にあなたの質問への回答を得るには、あなたの質問がどのSFTP/SSHサーバーにあるか教えてください。それはOpenSSHの約実際にある場合

  • 何も実行する必要がない、機能がすでにそこにあります。
  • 独自の実装を追加する場合は、OpenSSHコードを変更する必要があります。プラグインする方法はありません。internal-sftpの実装方法を確認してください。
  • あなた自身が提案したように、もう1つの方法はエージェントアーキテクチャを使用することです。このアプローチを取って助けが必要な場合は、SFTPではなく、プロセス間通信やファイル記述子の共有についてより具体的な質問をする必要があります。
関連する問題