web-dev-qa-db-ja.com

SSHキーでMac OS Xのキーチェーンを使うには?

私は、Mac OS X Leopard the Keychain以降、SSHキーの保存をサポートしていることを理解しています。誰かがこの機能がどのように機能することになっているのか説明してください。

さまざまなサーバーにアクセスするために、生成したRSAキーを〜/ .sshディレクトリに格納しています。これらのキーにはパスフレーズが設定されていません。現在これらのサーバーにログインするには、ターミナルで以下のコマンドを使用します。

 eval `ssh-agent` 
 ssh-add〜/ .ssh/some_key_rsa 
 ssh user @ server 

(私はこれを容易にするためにいくつかのBash関数を書きました。)

キーチェーンを使用してこれを行うためのより良い方法はありますか?

138
John Topley

これが機能するためには、$SSH_AUTH_SOCK環境変数が/tmp/launch-xxxxxx/Listenersを指す必要があります。これはログイン時に自動的に行われることになっています。そのソケットのリスナーはssh-agentプロトコルを話します。

あなたのbashスクリプトはあなた自身のsshエージェント(ssh_agentではなくssh-agentと綴られています)を起動し、ログイン時に設定された既存のssh-agentを上書きします。

また、キーチェーンの要点はあなたのsshキーにパスワードを保存することですが、あなたはそれらのキーにパスフレーズが設定されていないとあなたは言うので、私はあなたがキーチェーン統合から何を期待しているのかわかりません。

最後に、あなたが最初にログインしたとき、あなたはたぶんssh-agentプロセスを見ないでしょう。そのプロセスは、何かが/tmpでそのソケットを読み込もうとするときに、起動サービスによって自動的に開始されます。

16
Rudedog

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
252
jeffmcc

macOS Sierrassh-agentでは、アカウントにログインしたときに以前にロードされたsshキーが自動ロードされなくなりました。これはApple側では意図的なものです。彼らはメインストリームOpenSSH実装と再調整したいと考えました。 [1]


ここで で説明したように 、これはmacOS 10.12.2から推奨される方法です。

  1. ~/.ssh/configファイルに次の行を追加します。

    Host *
        UseKeychain yes
        AddKeysToAgent yes
    
  2. ssh-add /path/to/your/private/key/id_rsaコマンドを使用してssh-agentに追加したすべてのキーは自動的にキーチェーンに追加され、再起動時に自動ロードされるはずです。


以下は推奨されません(参照用に保持されています)。

以前の動作に戻るには、ログイン時にssh-add -Aコマンド(キーチェーンにパスフレーズがあるすべてのsshキーを自動ロードする)を実行します。これを行うには、次の手順を実行します。

  1. まず、ssh-add -K /absolute/path/to/your/private/key/id_rsaコマンドを使用して、自動ロードしたいすべてのキーをssh-agentに追加します。 -K引数は、キーパスフレーズがmacOSのキーチェーンに追加されることを保証します。必ずキーへの絶対パスを使用してください。相対パスを使用すると、自動起動スクリプトがあなたの鍵を見つけられないようになります。

  2. ssh-add -Aを入力したときに、すべてのキーが追加されたものとして表示されていることを確認してください。

  3. 以下の内容で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>
    
  4. launchdに、作成したばかりのplistファイルをロードするように指示します:launchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist

そして、あなたはすべての準備ができているはずです。

76

セッションの間にパスワードを保持する Ricardoの答え より簡単な方法があります。10.12Sierraを実行しているMacの再起動。

  1. ssh-add -K ~/.ssh/id_rsa
    注意:パスをid_rsaキーがある場所に変更してください。
  2. ssh-add -A
  3. 次の~/.ssh/configファイルを作成します(存在する場合は編集します)。

    Host *
      UseKeychain yes
      AddKeysToAgent yes
      IdentityFile ~/.ssh/id_rsa
    

    今すぐパスワードが再起動の間、記憶されています。

この OpenRadarで説明されているように、Appleは意図的にmacOS 10.12 Sierraのssh-agentの動作を以前のSSHキーを自動的にロードしないように変更しました。 、および アップルからのテクニカルノート 。上記の解決策は、El Capitanの古い動作を模倣し、あなたのパスワードを覚えているでしょう。

32
ChrisJF

注:macOS Sierraについては、ChrisJFによるより最近の 回答を参照してください

[Jeff McCarrellによる回答] [2]は正しいですが、パスフレーズを追加するコマンドにハイフンの代わりにenダッシュが含まれている、つまり–Kの代わりに-Kが含まれているため、–K: No such file or directoryの効果を示すメッセージを表示します。読みます:

ssh-add -K [path/to/private SSH key]
9
simonair

デフォルトのsshコマンドを使っていないのでしょうか。 sshをports経由でインストールしましたか?どのsshコマンドを使用しているかを確認するには、which sshを試してください。

通常、キーチェーンにまだ保存されていない場合は、パスワードを尋ねるダイアログボックスが表示されます。

6
Olly

クライアントのSSH証明書を使用してログインしようとしたときに、私は同様の問題を抱えていました。この特定のケースでは、gitリポジトリにアクセスするためのものでした。これが状況でした。

  • キーは~/.ssh/に保存されました
  • 秘密鍵にはパスフレーズがあります。
  • パスフレーズはOS Xのログインキーチェーンに格納されています。 ~/Library/Keychains/login.keychain
  • 接続は次のとおりです。私のMac ->リモートMac -> git/sshサーバー
  • Mac OS X 10.8.5

リモートデスクトップを使用してリモートMacに接続しても、問題はありませんでした。ただし、SSHでリモートMacに接続するときに、毎回sshパスフレーズを要求されました。次のステップで私はそれを解決しました。

  1. security unlock-keychainパスフレーズはログインキーチェーンに格納されています。これによりロックが解除され、ssh-agentからアクセスできるようになります。
  2. eval `ssh-agent -s`シェル用にssh-agentを起動します。キーチェーンからパスフレーズを取得し、それを使用してプライベートSSHキーのロックを解除します。
  3. Ssh/git接続を確立して私の仕事をしてください。
  4. eval `ssh-agent -k`実行中のssh-agentを終了させます。
  5. security lock-keychainキーチェーンをもう一度ロックします。
6
orkoden

また見なさい:

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」)。

4
xaphod

最善かつAppleが意図した解決策 (macOS 10.12.2以降) here と記述されています

次のようにしてください。

echo "UseKeychain yes" >>〜/ .ssh/config

1
Ben