SSH エージェント転送を使用すると、作業中のサーバーに機密データが残ることを心配せずに、プライベートのローカル SSH キーをリモートで使用できます。これは
ssh
に組み込まれており、セットアップと使用が簡単です。
SSH エージェントとは何ですか?
公開 SSH キーはユーザー名や ID のようなもので、誰とでも共有できます。秘密 SSH キーはパスワードのようなもので、コンピュータにローカルに保存されます。しかし、これはパスワードを付箋に保存するようなもので、アクセス権があれば誰でも閲覧できます。そのため、セキュリティのために、SSH はキーを生成するときにパスフレーズを要求し (その手順をスキップしなかったことを祈ります)、そのパスフレーズを使用して秘密キーの暗号化と復号化を行います。
ただし、これは、秘密キーを使用する必要があるたびにパスフレーズを入力する必要があることを意味し、面倒になります。これを管理するために、ほとんどの SSH 実装では、復号化されたキーをメモリ内に保持するエージェントを使用します。つまり、ロックを解除する必要があるのは 1 回だけで、再起動するまでロックが維持されるため、パスフレーズのプロンプトを表示せずにサーバーに安全にログインできます。もちろん、 SSH サーバーがロックダウンされていることを確認する 必要があります。
SSH エージェント転送とは何ですか?
SSH エージェントの転送は、さらに深い層に進むようなものです。たとえば、リモート サーバーに接続していて、次のことを行うとします。
git pull
Github に保存しているコード。 Github に SSH 認証を使用したいと考えていますが、秘密鍵はそのリモート サーバーには置かず、自分のマシンだけに置きたいと考えています。
この問題を解決するには、ローカル SSH エージェントをリモート サーバーに対して開き、接続中にエージェントがユーザーとして機能できるようにします。これにより、たとえ暗号化されていたとしても、秘密鍵はインターネット経由で送信されません。リモート サーバーがローカル SSH エージェントにアクセスして ID を確認できるようにするだけです。
これは次のように動作します。リモート サーバーに Github からコードを取得するよう依頼すると、Github は「あなたは誰ですか?」と尋ねます。サーバーに。通常、サーバーは独自の
id_rsa
ファイルを参照して回答しますが、代わりに質問をローカル マシンに転送します。ローカル マシンは質問に答え、その応答 (秘密キーは含まれません) をサーバーに送信し、サーバーはそれを Github に転送します。 Github は、ローカル マシンが質問に回答したかどうかには関係なく、質問が回答されたことだけを確認して、接続を許可します。
SSH エージェント転送を有効にする方法
Mac および Linux では、SSH エージェント転送が
ssh
に組み込まれており、
ssh-agent
プロセスが自動的に起動されます。あなたがしなければならないことは、キーが
ssh-agent
に追加されていることを確認し、転送を使用するように
ssh
を設定することだけです。
ssh-agent にキーを追加する
ユーティリティ
ssh-add
使用して、ローカル エージェントにキーを追加できます。秘密鍵が
id_rsa
に保存されていると仮定すると、次を実行できます。
ssh-add ~/.ssh/id_rsa
id_rsa
を使用する代わりに、キーを手動で貼り付けることもできます。次のコマンドを使用して、キーが適切に追加されていることを確認します。
ssh-add -L
存在する場合は、キーが吐き出されるはずです。
macOS でキーを追加する
macOS では、代わりに以下を実行する必要があります。
ssh-add -K ~/.ssh/id_rsa
-K
フラグは、キーを macOS キーチェーンに保存します。これは、再起動時にキーを記憶するために必要です。
クライアントの設定で転送を許可する
ローカルマシン上で
~/.ssh/config
ファイルを開くか、ファイルが空の場合は新しいファイルを作成します。このサーバーのドメインに対してエージェント転送が確実に有効になるように、新しいルールを設定します。
ホストの例
ForwardAgent はい
example
をサーバーのドメイン名または IP アドレスに置き換える必要があります。ホストにワイルドカード
*
を使用できますが、その場合、接続するすべてのサーバーに秘密キーへのアクセスが転送されることになり、これはおそらく希望どおりではありません。
オペレーティング システムによっては、macOS の場合は
/etc/ssh/ssh_config
、Ubuntu の場合は
/etc/ssh_config
に
SSH 構成ファイル
がある場合があります。これらのファイルは
~/.ssh/config
にあるユーザー設定ファイルをオーバーライドする可能性があるため、競合するものがないことを確認してください。
#
で始まる行はコメント化されており、効果はありません。
ssh -A user@host
を使用して、任意のドメインのエージェント転送を手動で有効にすることもできます。これにより、すべての構成ファイルがバイパスされます。設定を変更せずに簡単に転送する方法が必要な場合は、bash 設定に
alias ssh="ssh -A"
を追加できますが、これはワイルドカード ホストを使用するのと同じであるため、セキュリティの点からお勧めしません。集中した。
SSH 転送のテスト
手元に 2 つのサーバーがない場合、SSH 転送が機能しているかどうかをテストする最も簡単な方法は、ローカル マシンの公開キーを Github プロファイル に追加し、リモート サーバーから SSH を試行することです。
ssh git@github.com
機能した場合は、ユーザー名が表示され、サーバーに秘密キーを置くことなく、リポジトリからコードをプッシュおよびプルできるはずです。
Windows クライアントの SSH 転送のセットアップ
Windows は Unix オペレーティング システムではないため、セットアップは、そもそも
ssh
どの程度正確に実行しているかによって異なります。
Windows 上で bash を実行できる Windows 用 Linux サブシステム を使用している場合、コマンド ラインを実行するために Linux ディストリビューションを完全に仮想化するため、セットアップは Linux または macOS の場合と同じになります。
Git Bash を使用している場合、セットアップは Linux の場合と同じですが、シェルを起動するときに
ssh-agent
を手動で起動する必要があります。これは
.bashrc
の起動スクリプト
を使用して実行できます。
PuTTY を使用している場合、セットアップは非常に簡単です。設定から、[接続] > [SSH] > [認証] に移動し、[エージェント転送を許可する] を有効にします。
同じペインから秘密キー ファイルを追加することもできます。 PuTTY が SSH エージェントを処理するため、構成ファイルをいじる必要はありません。
SSH 転送が機能しない場合の対処方法
まず実際に SSH キーを持っていることを確認してください。そうでない場合は、
ssh-keygen
を実行すると、秘密鍵が
~/.ssh/id_rsa
に、公開鍵が
~/.ssh/id_rsa.pub
に配置されます。
SSH キーが通常の認証で適切に機能していることを確認し、
ssh-agent
に追加します。
ssh-add
使用してキーを追加できます。
ssh-agent
プロセスも実行されている必要があります。 macOS と Linux では、自動的に起動するはずですが、次のコマンドで実行していることを確認できます。
エコー「$SSH_AUTH_SOCK」
正しく設定されている場合は、
Listeners
ソケットが返されることがわかります。
ForwardAgent yes
が含まれるように構成ファイルが適切に設定されていることを確認し、他の構成ファイルがこの動作を上書きしていないことを確認してください。 SSH が使用している設定ファイルを確認するには、
ssh
冗長モードで実行します。
ssh -v git@github.com
どの構成ファイルが使用されているかが表示されます。このリストの後ろに表示されるファイルは、前のファイルよりも優先されます。
そしてもちろん、コマンドラインオプションは設定ファイルをオーバーライドします。エージェント転送が
ssh -A
で機能せず、キーがエージェントで適切に構成されている場合は、何か他の問題が発生しているため、チェーン内のサーバーへの接続を確認する必要があります。





