私のデスクトップはオフィスにあります。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
コマンドラインオプションを使用してください。 (この機能はサーバー側(AllowAgentForwarding
in sshd_config
)で無効にすることはできますが、任意のシェルコマンドを実行できない制限付きアカウントにのみ役立ちます。)これにより、ローカルコンピュータのすべてのキーをリモートセッションで使用できます。クライアントでプロキシ転送を有効にすると、セキュリティに影響します。つまり、リモートコンピュータの管理者がキーにアクセスできるようになります(たとえば、Aにあり、BのキーとCのキーがあり、Bに接続されている場合はプロキシ転送を有効にするなど)。これにより、BはCにログインできるキーにアクセスできます。
オフィスコンピュータのXセッション内のエージェントを自宅のSSHセッションでも使用できるようにするには、SSH_AUTH_SOCK
Xセッションと同じファイルを指すように環境変数を設定する必要があります。手動で行うのは簡単です。
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_environment
。ssh-agent
.profile
export SSH_AUTH_SOCK=~/.ssh/$HOSTNAME.agent
if [ -z "$(pgrep -U "$USER" ssh-agent)" ]; then
ssh-agent >/dev/null
fi