私は自分のデスクトップをオフィスに持っています。 X
が開始すると、ssh-agent
が自動的に開始します。最初にSSH key
を一度追加する必要があります。そうすれば、毎回パスワードを入力しなくてもssh
を使用できます。
ただし、SSH
を介して(つまり、自宅から)デスクトップに接続すると、ssh-agent
にアクセスできず、毎回キーを入力する必要があります。また、ssh-agent
の新しいインスタンスを開始しても、接続できません。
リモートシステム(ssh
経由で接続している)でssh-agent
を使用する方法はありますか?
エージェント転送を使用できます。クライアント側の構成(ForwardAgent yes
)に必ず~/.ssh/config
を含めるか、-A
コマンドラインオプションを使用してください。 (この機能はサーバー側で無効にできます(sshd_config
のAllowAgentForwarding
)が、これは任意のシェルコマンドを実行できない制限付きアカウントにのみ役立ちます。)このようにして、ローカルのすべてのキーマシンはリモートセッションで使用できます。クライアント側でエージェント転送を有効にすると、セキュリティに影響することに注意してください。リモートマシンの管理者がキーにアクセスできるようになります(たとえば、Aにいて、BのキーとCのキーがあり、エージェントの転送を有効にする場合)。 Bへの接続で、これによりBがキーにアクセスできるようになり、Cにログインできるようになります。
オフィスマシンのXセッションのエージェントを自宅のSSHセッションで使用できるようにする場合は、Xセッションと同じファイルを指すようにSSH_AUTH_SOCK
環境変数を設定する必要があります。手動で行うのは簡単です。
export SSH_AUTH_SOCK=/tmp/ssh-XXXXXXXXXXXX/agent.12345
ここで、XXXXXXXXXXXX
はランダムな文字列で、12345
はエージェントプロセスのPIDです。実行中のエージェントが1つ(find /tmp -maxdepth 1 -user $USER -name 'ssh-*'
)ある場合はこれを簡単に自動化できますが、複数ある場合に必要なエージェントを検出するのはより複雑です。
実行中のプロセスからSSH_AUTH_SOCK
の値を抽出できます。たとえば、Linuxでは、ウィンドウマネージャーがMetacity(デフォルトのGnomeウィンドウマネージャー)の場合、次のようになります。
env=$(grep -z '^SSH_AUTH_SOCK=' /proc/$(pidof -s metacity)/environ')
if [ -n "$env" ]; then export "$env"; fi
または、単一のSSHエージェントを使用するようにオフィスマシンを構成することもできます。ログイン時にエージェントが自動的に開始される場合、ほとんどのディストリビューションでは、環境にSSH_AUTH_SOCK
という変数が既に存在する場合はエージェントは開始されません。したがって、SSH_AUTH_SOCK
の定義を~/.profile
または~/.pam_environment
に追加し、ssh-agent
でまだ開始されていない場合は手動で.profile
を開始します。
export SSH_AUTH_SOCK=~/.ssh/$HOSTNAME.agent
if [ -z "$(pgrep -U "$USER" ssh-agent)" ]; then
ssh-agent >/dev/null
fi
リモートシェルで、次のコマンドを実行できます。
ssh-agent bash
このようにして、必要な環境変数が設定された新しいSSHエージェントインスタンスと新しいbash
シェルを取得します。 exit
またはlogout
を指定してシェルを終了すると、SSHエージェントも終了します。
直接使用しているデバイスで同じキーを使用できる場合は、ssh -A
を使用して、新しく起動したローカルエージェントにアクセスできるようにすることもできますリモートシェル =。これにはセキュリティ上の影響がいくつかありますが、いずれにせよ両方のデバイスでキーを使用できる場合は、違いはありません。
既存のエージェントに接続する場合は、グラフィカルシェルで設定されているのと同じように、関連する環境変数を設定する必要があります。 GUIセッションの自動開始機能を使用して、変数をどこかに格納すると便利な場合があります。 env
を使用して環境変数を取得できます。
env | grep SSH
エージェントにアクセスするには、基本的にSSH_AUTH_SOCK
が必要です。 SSH_AGENT_PID
はエージェントに信号を送信するために使用され、他のSSH変数は補助ツールに使用されます。
/proc/*/environ
を介して他のプロセスの環境にアクセスすることもできます。ただし、アイテムはLFで終了するのではなく、NULで終了します。この場合、ファイル方式が望ましいと思います。