sudoを使用してコマンドを実行するときにSSH認証エージェントに接続する

sudoを使用してコマンドを実行するときにSSH認証エージェントに接続する

私は使うマネージャーをお待ちくださいさまざまなオペレーティングシステム構成をバージョン管理に適用します。これまでは、ローカルのGitリポジトリを使用して変更を追跡するだけで満足していましたが、突然この機能を最大限に活用していないことに気付きました。別のストレージからデータを取得できるように、/etcコンピューターは構成をインポートします。

リモートサーバーにベアリポジトリを作成しました(ユーザーのみがgitそのコンテンツにアクセスできるようにします)。

sudo -u git -H git init --bare ~git/repos/anthony-etc.git
chmod -R 700 ~git/repos/anthony-etc.git/

リモートサーバーのSSHデーモンは、ユーザー(ユーザーを含むgit)が鍵のみを使用して認証できるように構成されており、個人用の公開鍵をサーバーのユーザーにアップロードしました.authorized_keysgit

私のローカルコンピュータからリモートストレージとして追加しました。

sudo git remote add origin [email protected]:/home/git/repos/anthony-etc.git/

スーパーユーザーだけがディレクトリ/etc(サブディレクトリを含む).gitのファイルを変更できるので、すべてのGitコマンドはsudo

SSHを使用してプッシュを試みる前に、現在SSH認証エージェントが利用可能であることを確認しました。

$ sudo ssh-add -l
Could not open a connection to your authentication agent.

実行すると、失敗し、root以外のユーザーとしてすでに使用しているSSH認証エージェントと連携するようにsudo設定できる方法がわかります。sudo

答え1

機能しない理由は、SSH_AUTH_SOCKコマンドを実行するときにSSHエージェントのUnixドメインソケットファイル名を保存するために使用される変数が環境にないためですsudo

このオプションはデフォルトでenv_resetセキュリティポリシーで有効になっており、多くのGNU / Linuxディストリビューションでは、sudo設定ファイルに次の行を追加して明示的に作成します。/etc/sudoers

Defaults    env_reset

これにより、コマンドが最小環境で実行され、呼び出し側ユーザーのほとんどの環境変数が制限された環境から削除されます。

特定の変数をホワイトリストに登録して環境に保持できます。安全のため、visudoコマンドを使用してsudoers構成ファイルを編集します。また/etc/sudoers、直接変更するのではなく、ディレクトリ内の別々のファイルにカスタム修正を追加しています/etc/sudoers.d/。これを行うには、sudo visudo -f /etc/sudoers.d/custom構成に次の行が含まれるように実行します。

Defaults    env_keep += "SSH_AUTH_SOCK"

これで実行すると、sudo ssh-add -l認証ブローカーに接続でき、リモートリポジトリを引き続き更新できることが表示されます。

sudo git push --set-upstream origin master

関連情報