シナリオ:
ローカルPCでssh-agentを実行しており、すべてのサーバー/クライアントがSSHエージェント認証を転送するように設定されています。 ローカルPCのssh-agentを使用して、すべてのマシン間を移動できます。これで機能します。
自分自身(user1)としてマシンにSSHで接続、user2という名前の別のユーザーに変更(Sudo -i -u user2)、次に別のユーザーにsshを実行できる必要がありますローカルPCで実行しているssh-agentを使用したボックス。 ssh user3 @ machine2のようなことをしたいとしましょう(user3がauthorized_keysファイルに私の公開SSHキーを持っていると仮定します)。
SudoがSSH_AUTH_SOCK環境変数を保持するように構成されています。
関係するすべてのユーザー(user [1-3])は、非特権ユーザー(rootではありません)です。
問題:
SSH_AUTH_SOCK変数が正しく設定されていても、別のユーザーに変更すると(たとえば、/ tmp/ssh-HbKVFL7799/agent.13799に設定されている場合)、user2はuser1によって作成されたソケットにアクセスできません-どれもちろん、理にかなっています。そうしないと、user2がuser1の秘密鍵を乗っ取って、そのユーザーとして飛び回る可能性があります。
このシナリオは、user2のSudoを介してシェルを取得する代わりに、rootのSudoを介してシェルを取得する場合に問題なく機能します。当然、rootはマシン上のすべてのファイルにアクセスできるからです。
質問:
できればSudoを使用してser1からuser2に変更しても、user1のSSH_AUTH_SOCKにアクセスできるようにするにはどうすればよいですか?
あなたがする必要がある2つのことがあります:
SSH_AUTH_SOCK
変数を設定しますしたがって、あなたができることは次のとおりです。
User1として、user2がソケットに接続できるようにします(ソケットへのフルアクセスとディレクトリへのアクセス許可)。あなたの/tmp
がACLを許可することを願っています。
setfacl -m u:user2:rw $SSH_AUTH_SOCK
setfacl -m u:user2:x $(dirname $SSH_AUTH_SOCK)
他のユーザーに変更し、変数を正しくエクスポートします。
Sudo -u user2 env SSH_AUTH_SOCK=$SSH_AUTH_SOCK ssh user3@machine2
Sudo
を使用してインタラクティブなシェルを開きたい場合は、シェルを取得した後、SSH_AUTH_SOCK
変数を自分でエクスポートする必要があります。