私は、Mac OS X Leopard the Keychain以降、SSHキーの保存をサポートしていることを理解しています。誰かがこの機能がどのように機能することになっているのか説明してください。
さまざまなサーバーにアクセスするために、生成したRSAキーを〜/ .sshディレクトリに格納しています。これらのキーにはパスフレーズが設定されていません。現在これらのサーバーにログインするには、ターミナルで以下のコマンドを使用します。
eval `ssh-agent` ssh-add〜/ .ssh/some_key_rsa ssh user @ server
(私はこれを容易にするためにいくつかのBash関数を書きました。)
キーチェーンを使用してこれを行うためのより良い方法はありますか?
これが機能するためには、$SSH_AUTH_SOCK
環境変数が/tmp/launch-xxxxxx/Listeners
を指す必要があります。これはログイン時に自動的に行われることになっています。そのソケットのリスナーはssh-agentプロトコルを話します。
あなたのbashスクリプトはあなた自身のsshエージェント(ssh_agentではなくssh-agent
と綴られています)を起動し、ログイン時に設定された既存のssh-agent
を上書きします。
また、キーチェーンの要点はあなたのsshキーにパスワードを保存することですが、あなたはそれらのキーにパスフレーズが設定されていないとあなたは言うので、私はあなたがキーチェーン統合から何を期待しているのかわかりません。
最後に、あなたが最初にログインしたとき、あなたはたぶんssh-agentプロセスを見ないでしょう。そのプロセスは、何かが/tmp
でそのソケットを読み込もうとするときに、起動サービスによって自動的に開始されます。
OS XのLeopardリリースの時点で、ssh-agentはKeychainとより密接に統合されています。すべてのSSH鍵のパスフレーズをKeychainに安全に保存することが可能です。そこからssh-agentが起動時にそれらを読み取ります。肝心なのは、パスフレーズで鍵を保護するのは簡単なことですが、使用するためにパスフレーズを入力する必要はありません。方法は次のとおりです。
キーチェーンの各sshキーにパスフレーズを追加します。(オプション-kはプレーンなプライベートキーのみをロードし、証明書をスキップします)
ssh-add -K [path/to/private SSH key]
(これは大文字のKです)
Macを再起動するたびに、キーチェーン内のすべてのSSHキーが自動的に読み込まれます。 Keychain Accessアプリのキーを確認できるはずです。また、コマンドラインからも次のように確認できます。
ssh-add -l
macOS Sierra、ssh-agentでは、アカウントにログインしたときに以前にロードされたsshキーが自動ロードされなくなりました。これはApple側では意図的なものです。彼らはメインストリームOpenSSH実装と再調整したいと考えました。 [1]
ここで で説明したように 、これはmacOS 10.12.2から推奨される方法です。
~/.ssh/config
ファイルに次の行を追加します。
Host *
UseKeychain yes
AddKeysToAgent yes
ssh-add /path/to/your/private/key/id_rsa
コマンドを使用してssh-agentに追加したすべてのキーは自動的にキーチェーンに追加され、再起動時に自動ロードされるはずです。
以下は推奨されません(参照用に保持されています)。
以前の動作に戻るには、ログイン時にssh-add -A
コマンド(キーチェーンにパスフレーズがあるすべてのsshキーを自動ロードする)を実行します。これを行うには、次の手順を実行します。
まず、ssh-add -K /absolute/path/to/your/private/key/id_rsa
コマンドを使用して、自動ロードしたいすべてのキーをssh-agentに追加します。 -K
引数は、キーパスフレーズがmacOSのキーチェーンに追加されることを保証します。必ずキーへの絶対パスを使用してください。相対パスを使用すると、自動起動スクリプトがあなたの鍵を見つけられないようになります。
ssh-add -A
を入力したときに、すべてのキーが追加されたものとして表示されていることを確認してください。
以下の内容でcom.yourusername.ssh-add.plist
に~/Library/LaunchAgents/
というファイルを作成します。 このようなplistファイルは、ログイン時にスクリプトを実行するためにlaunchd
によって使用されます。 [2][3]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.user.loginscript</string>
<key>ProgramArguments</key>
<array>
<string>ssh-add</string>
<string>-A</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
launchd
に、作成したばかりのplistファイルをロードするように指示します:launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist
。
そして、あなたはすべての準備ができているはずです。
セッションの間にパスワードを保持する Ricardoの答え より簡単な方法があります。10.12Sierraを実行しているMacの再起動。
ssh-add -K ~/.ssh/id_rsa
ssh-add -A
次の~/.ssh/config
ファイルを作成します(存在する場合は編集します)。
Host *
UseKeychain yes
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
今すぐパスワードが再起動の間、記憶されています。
この OpenRadar 、 で説明されているように、Appleは意図的にmacOS 10.12 Sierraのssh-agentの動作を以前のSSHキーを自動的にロードしないように変更しました。 、および アップルからのテクニカルノート 。上記の解決策は、El Capitanの古い動作を模倣し、あなたのパスワードを覚えているでしょう。
注:macOS Sierraについては、ChrisJFによるより最近の 回答を参照してください 。
[Jeff McCarrellによる回答] [2]は正しいですが、パスフレーズを追加するコマンドにハイフンの代わりにenダッシュが含まれている、つまり–K
の代わりに-K
が含まれているため、–K: No such file or directory
の効果を示すメッセージを表示します。読みます:
ssh-add -K [path/to/private SSH key]
デフォルトのssh
コマンドを使っていないのでしょうか。 ssh
をports経由でインストールしましたか?どのssh
コマンドを使用しているかを確認するには、which ssh
を試してください。
通常、キーチェーンにまだ保存されていない場合は、パスワードを尋ねるダイアログボックスが表示されます。
クライアントのSSH証明書を使用してログインしようとしたときに、私は同様の問題を抱えていました。この特定のケースでは、gitリポジトリにアクセスするためのものでした。これが状況でした。
~/.ssh/
に保存されました~/Library/Keychains/login.keychain
->
リモートMac ->
git/sshサーバーリモートデスクトップを使用してリモートMacに接続しても、問題はありませんでした。ただし、SSHでリモートMacに接続するときに、毎回sshパスフレーズを要求されました。次のステップで私はそれを解決しました。
security unlock-keychain
パスフレーズはログインキーチェーンに格納されています。これによりロックが解除され、ssh-agentからアクセスできるようになります。eval `ssh-agent -s`
シェル用にssh-agentを起動します。キーチェーンからパスフレーズを取得し、それを使用してプライベートSSHキーのロックを解除します。eval `ssh-agent -k`
実行中のssh-agentを終了させます。security lock-keychain
キーチェーンをもう一度ロックします。また見なさい:
security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain
...より詳細な情報が要求されたため、このメモを追加してください。 "security"コマンドはキー(およびその他のもの)を直接キーチェーンにインポートすることができます。いいところは、ssh-addとは異なり、キーチェーンを指定できることです。これにより、システムのKeychainに直接インポートすることが可能になります(方法については「man security」)。
最善かつAppleが意図した解決策 (macOS 10.12.2以降) は here と記述されています
次のようにしてください。
echo "UseKeychain yes" >>〜/ .ssh/config