SSHauthorized_keysで設定されたサーバ側コマンドは、受信データをどのように処理しますか?

SSHauthorized_keysで設定されたサーバ側コマンドは、受信データをどのように処理しますか?

gitやGitoliteなどの一部のユーティリティはファイルを変更してSSHキーが実行できるコマンドを制限することがありますauthorized_key

たとえば、Gitoliteの変更はファイル内のエントリをauthorized_keys次のように変更します。

command="/usr/bin/gitolite/src/gitolite-shell username",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

このコマンドは受信側で実行されるため、SSH接続を介して着信データストリームを処理する必要があります。

このようなコマンドは、着信データストリームを読み取り、それを使用するディレクトリやプロセスに送信するなど、着信データをどのように処理しますか?

答え1

これは、SSHで実行される他のコマンドのように実行されます。 SSH は、開始されたコマンドに対してクライアントの stdin/stdout/stderr をサーバーの stdin/stdout/stderr に接続します。その後、コマンドは通常どおりstdinからデータを読み込み、通常どおりstdoutとstderrを介してデータを送信できます。

制限してもauthorized_keys違いはありません。ただし、質問に提供されている特定のケースでは、TTY割り当てが無効になる可能性があるため(ポート転送など)、TTYを要求してもTTYは生成されません。

逃げても構わない

ssh some-server /usr/bin/gitolite/src/gitolite-shell username

この場合、サーバーはユーザーが指定した内容を無視して実行されますauthorized_keys

関連情報