command=""
in を使用すると、authorized_keys
特定のキーが実行できるコマンドを制限できます。
Gitがリモートで動作するにはどのコマンドが必要ですか?
~からプロGitの本このように推論でき、git-upload-pack
必須git-receive-pack
ですが、他に何がありますか?
注私はこのキーを使用せずにユーザーが正常にログインできるようにしたいと思います。
答え1
頑張ってgit-shell
Git専用のログインシェルとして使用するのに適したコマンドです。次のコマンドを完全に許可します。
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
必要に応じてこれを行う方法の説明を参照してください。