質問

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

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

これをconchで「カスタム」に変更する方法を見つけることができますが、 shell ... SSHストリームが本物のように動作するようにする方法がわかりません(bzr + sshが動作するように/ bin / bzrに制限したいのが望ましいです。

Python(許可を取得できる)である必要がありますが、アプリへのリンクを行う方法がわかりません。

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

役に立ちましたか?

解決

Conchサーバーを作成する場合、 ISession.openShell 。 Conchサーバーは、 IConchUser をレルムから取得し、結果のアバターを ISession に適合させて、必要に応じて openShell を呼び出します。

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

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

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

通常のシェル作成の実装を使用して、目的の内容を把握します。これにより、起動するbzr子プロセスのstdioをSSHチャネルに関連付ける方法についての手がかりが得られます。

他のヒント

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top