web-dev-qa-db-ja.com

SSHキーをSCPのみに制限する

問題:

サーバーへのrootアクセス権がなく(つまり、システム全体のサーバー構成を変更できない/変更したくない)、別のIDファイルでscpを使用したい(たとえば、.ssh/id_rsa_for_scp)サーバーからいくつかのファイルのダウンロードを自動化しますが、同じkeyを使用してssh経由でサーバーにアクセスしたくありません。

5
Michael Richard

キーファイルをサーバーにコピーした後:

ssh-copy-id -i ~/.ssh/id_rsa_for_scp [email protected]

(例を簡略化するために、クライアントのマシン〜/ .ssh/configがすでに構成されていると想定します。~/.ssh/configの詳細については、man ssh_configを実行してください)

Host testmachine
    Hostname 192.168.1.1
    User legendaryuser
    BatchMode yes
    IdentitiesOnly yes
    IdentityFile ~/.ssh/id_rsa_for_scp

サーバーの/home/legendaryuser/.ssh/authorized_keysファイルを編集する必要があります。

から:

ssh-rsa AAAAAC3nZCXExxHUEBR...

To:(このバージョンではダウンロードとアップロードが可能です)

command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo Access Denied; fi" ssh-rsa AAAAAC3nZCXExxHUEBR...

Scpを「ダウンロード専用モード」に限定し、特定のディレクトリのファイルのみに限定するには、次のようにします。

command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp[[:space:]]-f[[:space:]]/full/path/to/dir/.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo Access Denied; fi" ssh-rsa AAAAAC3nZCXExxHUEBR...

最後に、安全のために、キーにいくつかの制限を追加します。

command="if [[ \"$SSH_ORIGINAL_COMMAND\" =~ ^scp[[:space:]]-f[[:space:]]/full/path/to/dir/.? ]]; then $SSH_ORIGINAL_COMMAND ; else echo ERRO Access Denied; fi",no-pty,no-port-forwarding,no-agent-forwarding,no-X11-forwarding ssh-rsa AAAAAC3nZCXExxHUEBR...

次のコマンドを実行すると、authorized_keysファイルの詳細を確認できます。

man sshd

Ps:特定のIPアドレスまたはネットワークからのキーの使用を制限するためにfrom=xxx.xxx.xxx.xxxを追加することもできます。

Pps:私の英語は申し訳ありませんが、私はネイティブスピーカーではありません。

13
Michael Richard