5

私は実行できるPythonでサーバーを作成することを検討しており、SSHサーバーとして機能します。これにより、さまざまなユーザーがログインできるようになり、通常どおりログインしたかのように動作しますが、1 つのコマンドにしかアクセスできません。

システム全体のアカウントを作成せずにユーザーを追加できるシステムを用意して、たとえば VCS ブランチなどにコミットできるようにするために、これを行いたいと考えています。

conch を使用してこれを「カスタム」シェルにする方法を考え出すことはできますが、SSH ストリームが実際のものであるかのように動作するようにする方法がわかりません (私はbzr+ssh が機能するように /bin/bzr に制限することが望ましいです。

それはPythonである必要があります(承認を行うことができます)が、アプリへのリンクを行う方法がわかりません。

これは、設計されたアプリ内で機能し、新しいユーザーを追加するためのアクセス権のないユーザーが使用できるようにするために、Python である必要があります。

4

2 に答える 2

7

Conch サーバーを作成すると、クライアントがシェル要求を行ったときに何が起こるかを制御できますISession.openShell。Conch サーバーはIConchUserレルムからリクエストを送信し、必要に応じて結果のアバターISessionを呼び出しopenShellて適応させます。

ISession.openShellの仕事は、渡されたトランスポート オブジェクトを取得し、それをプロトコルに関連付けて、そこから受信したバイトを解釈し、必要に応じてバイトを書き込み、クライアントに送信することです。

残念なことにopenShell、トランスポートを表す渡されるオブジェクトは、実際にはIProcessProtocolプロバイダーです。これは、プロバイダーmakeConnectionを渡して、それを呼び出す必要があることを意味します。IProcessTransportクライアントからデータを受信すると、 は渡したトランスポートをIProcessProtocol呼び出します。クライアントにデータを送信する場合は、それを呼び出す必要があります。writeToChildmakeConnectionchildDataReceived

正確な動作を確認するには、渡された の実装をIProcessProtocol読むことをお勧めします。の一部ではないものに依存しないでくださいIProcessProtocol。ただし、実装を確認すると、何が起こっているのかを理解しやすくなります。

また、通常のシェル作成の実装を見て、何を目指しているのかを把握することもできます。これにより、起動した bzr 子プロセスの stdio を SSH チャネルに関連付ける方法の手がかりが得られます。

于 2008-10-09T22:30:29.813 に答える
-2

Python は私のお気に入りの言語ですが、このために独自のサーバーを作成する必要はないと思います。sshdの OpenSSH マニュアルページを見ると、ログイン時に実行する特定のコマンドを定義できる認証キー ファイルの「コマンド」オプションが見つかります。

キーを使用すると、1 つのシステム アカウントを使用して多くのユーザーがログインできるようになり、公開キーをアカウントの承認済みキー ファイルに入れるだけで済みます。

これを使用して SVN の SSH トンネルを作成していますが、うまく機能します。

于 2008-10-09T09:00:11.760 に答える