SSHエージェントの使用

SSHエージェントの使用

私のデスクトップはオフィスにあります。X起動時にssh-agent自動的に起動します。最初に一度だけ追加すると、毎回パスワードを入力しなくてもSSH key使用できます。ssh

SSHただし、自宅で背中を介してデスクトップに接続するとssh-agentアクセスできなくなり、毎回キーを提供する必要があります。そして、新しいインスタンスを起動してもssh-agentまだ接続できません。

ssh-agentリモートシステムでこれを使用する方法はありますかssh

答え1

リモートシェルで次を実行します。

ssh-agent bash

bashこれにより、必要な環境変数が設定された新しいSSHエージェントインスタンスと新しいシェルが提供されます。 SSHエージェントは、exitシェルを使用または終了したときにも終了します。logout

直接使用しているデバイスに同じキーがある場合は、次のものを使用することもssh -Aできます。地元の新しくリリースされたエージェントにはアクセスできます。リモートシェル。いくつかのセキュリティ関連がありますが、両方のデバイスでキーが利用可能な場合、特に違いはありません。

既存のプロキシに接続するには、グラフィックシェルで設定するのと同様に、関連する環境変数を設定する必要があります。 GUIセッションの自動起動機能を使用して、変数をどこかに保存するのが便利です。を使用して環境変数を取得できますenv

env | grep SSH

プロキシにアクセスするには、デフォルトでプロキシにシグナルを送信するSSH_AUTH_SOCKためにのみ必要です。他のSSH変数はヘルパーツール用です。SSH_AGENT_PID

他のプロセスの環境にもアクセスできます/proc/*/environ。ただし、これらの項目は LF ではなく NUL で終わります。この場合、ファイルアプローチがより望ましいと思います。

答え2

ForwardAgent yesプロキシ転送を使用できます。クライアント構成(~/.ssh/config)に含まれていることを確認するか、-Aコマンドラインオプションを使用してください。 (この機能はサーバー側(AllowAgentForwardingin sshd_config)で無効にすることはできますが、任意のシェルコマンドを実行できない制限付きアカウントにのみ役立ちます。)これにより、ローカルコンピュータのすべてのキーをリモートセッションで使用できます。クライアントでプロキシ転送を有効にすると、セキュリティに影響します。つまり、リモートコンピュータの管理者がキーにアクセスできるようになります(たとえば、Aにあり、BのキーとCのキーがあり、Bに接続されている場合はプロキシ転送を有効にするなど)。これにより、BはCにログインできるキーにアクセスできます。

オフィスコンピュータのXセッション内のエージェントを自宅のSSHセッションでも使用できるようにするには、SSH_AUTH_SOCKXセッションと同じファイルを指すように環境変数を設定する必要があります。手動で行うのは簡単です。

export SSH_AUTH_SOCK=/tmp/ssh-XXXXXXXXXXXX/agent.12345

ここではXXXXXXXXXXXX、任意の文字列で、12345エージェントプロセスのPIDです。実行中のプロキシ()があれば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_environmentssh-agent.profile

export SSH_AUTH_SOCK=~/.ssh/$HOSTNAME.agent
if [ -z "$(pgrep -U "$USER" ssh-agent)" ]; then
  ssh-agent >/dev/null
fi

関連情報