SSH経由で通信するとき、Gitはどのコマンドを使用しますか?

SSH経由で通信するとき、Gitはどのコマンドを使用しますか?

command=""in を使用すると、authorized_keys特定のキーが実行できるコマンドを制限できます。

Gitがリモートで動作するにはどのコマンドが必要ですか?

~からプロGitの本このように推論でき、git-upload-pack必須git-receive-packですが、他に何がありますか?

注私はこのキーを使用せずにユーザーが正常にログインできるようにしたいと思います。

答え1

頑張ってgit-shellGit専用のログインシェルとして使用するのに適したコマンドです。次のコマンドを完全に許可します。

git receive-pack
git upload-pack
git upload-archive
git-receive-pack
git-upload-pack
git-upload-archive
cvsサーバー(CVSサーバーをシミュレートするために使用され、Gitプロトコルには不要)

したがって、許可する必要がある唯一のコマンドは次のとおりです。私がアクセスできるすべてのGitバージョンは、ハイフンを含むバージョンのみを使用します。

git-shellあなたがやりたいことをするだけで十分かもしれません。


GIT_SSHパラメータを反映するshimを設定して、特定のコマンドに対してGitが実行されている内容を確認できます。スクリプトを作成しますssh.sh

#!/bin/bash
echo "$@" >&2

次に、次を実行します。

GIT_SSH="./ssh.sh" git push

実行を試みるリモートコマンドが表示されます。

答え2

そのユーザーアカウントを他の目的に使用したくない場合は、chshそのユーザーに対して実行し、/usr/bin/git-shellそのユーザーのログインシェルとして選択(またはどこにいても)できます。

ただし、特定のキーを使用する場合にのみユーザーを制限したいので、同じことを行うヘルパースクリプトを作成する必要があります。

たとえば、以下を含む(ターゲットホストの)ホームディレクトリに名前が付けられたファイルを作成しますgit-ssh-remote-command

#!/bin/sh
exec git-shell -c "$SSH_ORIGINAL_COMMAND"

実行chmod a+rx /path/to/git-ssh-remote-commandして実行可能にし、ファイル.ssh/authorized_keysからgitアクセスのみに制限したいキーとして使用します。たとえば、次のようになります。

restrict,command="/path/to/git-ssh-remote-command" ssh-dss 1478912c844...

スクリプトの助けを借りて、git-shellが許可するコマンドのみを実行するようにキーを制限します。

メモ:デフォルトでは、git-shellはgit-lfsやその他のエントリに必要な追加のコマンドを許可しません。man git-shell必要に応じてこれを行う方法の説明を参照してください。

関連情報