SSHキーでMac OS Xキーチェーンを使用する方法


141

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

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

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

(これを簡単にするために、いくつかのBash関数を作成しました。)

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

回答:


16

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

bashスクリプトは、独自のsshエージェント(ssh-agentssh_agentではなくスペル)ssh-agentを起動し、ログイン時に設定された既存のsshエージェントをオーバーライドします。

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

最後に、最初にログインするとき、おそらくssh-agentプロセスは表示されません。そのプロセスは、何かがでそのソケットを読み取ろうとするときに、起動サービスによって自動的に開始され/tmpます。


1
ありがとう。したがってssh-add、ログイン時に開始されたデフォルトのsshエージェントにRSA IDを追加するには、まだ実行する必要がありますか?
ジョン・トップリー

ssh-addを実行する必要はありません。ssh-agentは、sshを最初に実行するときにキーのパスフレーズを要求します。
Rudedog

3
sshを実行するたびにパスワードの入力を求められます。ポイントは、パスワードを入力する必要がないことです。
ジョントップリー

1
パスワードの入力を求めるものは何ですか?私はそれがあなたを促しているのはリモートサーバーであると疑い始めています。それはあなたのキーがより良い観点でパスフレーズを持っていないというあなたの声明を置きます。リモートサーバーでパスワードをバイパスする場合は$HOME/.ssh/authorized_keys、そのサーバーに公開キーを追加する必要があります。Mac OSのssh-agent + keychainは、ローカルsshキーのパスフレーズを保存するためにのみ使用されます。既存のssh接続を介してリモートパスワードを送信するためのものではありません。
Rudedog

1
ssh -vsshの動作を診断するために使用します。またsshd -p 8900 -v、サーバー側で使用し、ssh -v remote:8900sshdが実行していることを診断します。
ルードドッグ

252

OS XのLeopardリリースの時点で、ssh-agentはキーチェーンとより緊密に統合されています。すべてのSSHキーのパスフレーズをキーチェーンに安全に保存し、ssh-agentが起動時にそれらを読み取ることができます。一番下の行は、パスフレーズでキーを保護するのは簡単ですが、それらを使用するためにパスフレーズを入力する必要がないということです!方法は次のとおりです。

パスフレーズをキーチェーンの各sshキーに追加します(オプション-kはプレーンプライベートキーのみをロードし、証明書をスキップします)

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

(大文字のKであることに注意してください)

Macを再起動すると、キーチェーン内のすべてのSSHキーが自動的にロードされます。キーチェーンアクセスアプリでキーを表示できるだけでなく、次のコマンドラインからも表示できるはずです。

ssh-add -l

ssh-add -lリモートで接続するときにキーをリストしません($ DISPLAYが設定されていない場合)。キーチェーンを使用するには、ここで特別なトリックを使用する必要があります(例:superuser.com/questions/141044/…
Ether

2
developer.apple.com/library/mac/documentation/Darwin/Reference/… また、キーチェーンにパスフレーズを保存するには-Kオプションが必要です。
ニームプラーク

5
Homebrewなどのパッケージシステムを介してSSHの別のバージョンをインストールした場合は、などの絶対パスを使用する必要があります/usr/bin/ssh-add
ルドヴィッククーティ

1
興味深いことに、私のmacOS Sierraでは、再起動後にパスワードを要求せず、ssh-add -l「エージェントにIDがありません」を返します。(をps aux含む/usr/bin/ssh-agent -l)。
ハリルÖzgür16年

4
macOS Sierraでは、状況が変わりました。参照してくださいgithub.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
schieferstapel

80

macOS Sierraの時点で、アカウントにログインしたときに、ssh-agentは以前にロードされたsshキーを自動ロードしなくなりました。これはApple側の意図的なもので、主流のOpenSSH実装と再調整したかったのです。[1]


ここで説明したように、これはmacOS 10.12.2以降の推奨される方法です

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

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


以下は非推奨です(参照用に保持されます)。

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

  1. 最初に、コマンドを使用して自動ロードするすべてのキーをssh-agentに追加しますssh-add -K /absolute/path/to/your/private/key/id_rsa。この-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. 次を実行して、作成したばかりlaunchdplistファイルをロードするように指示しますlaunchctl load ~/Library/LaunchAgents/com.yourusername.ssh-add.plist

そして、あなたはすべて設定されるべきです。



33

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

  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
    

    これで、再起動間でパスワードが記憶されます!

この中で述べたようにAppleが意図的に、もはや自動的に前のSSH鍵をロードしないためにMacOSの10.12シエラにssh-agentのために行動を変えOpenRadarTwitterの議論、およびアップルからのテクニカルノート。上記のソリューションは、El Capitanの古い動作を模倣し、パスワードを記憶します。


2
素晴らしい、魅力的なように動作し、他の人よりもきれいで、適切な場所で解決されました:)
GerardJP


10

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

[ジェフMcCarrellによって答えは] [2]パスフレーズを追加するためのコマンドが代わりにハイフンの半角ダッシュが含まれている、すなわちことを除いて、正確である–K代わりの-Kの効果にメッセージを引き起こし、–K: No such file or directory。次のようになります。

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

2
これは、新しい回答ではなく、参照する回答へのコメントである必要があります。ここでセキュリティについて説明しています。一つは、あなたが慎重にそれを入力するのではなく盲目的にコピー&ペーストする必要がある提案することができssh-add -K
Phil_1984_

1
Kでハイフンを使用すると、が得られillegal option -- Kます。小文字のkがオプションとしてリストされています。
サム・ダットン

フィードバックをお寄せいただきありがとうございます。macOS Sierraで確認したところ:-K、つまりdash-capital-Kはまだ有効です
-simonair

6

デフォルトのsshコマンドを使用していないと思われます。あなたが持っているsshポートを介してインストールされていますか?使用しwhich sshているsshコマンドを確認してください。

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


ポートを使用していません。
ジョントップリー

情報をありがとう:) HomebrewのOpenSSHを使用していたため、問題が発生しました。
-ggustafsson

6

クライアント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 キーチェーンを再度ロックします。

1
#2がエイリアス内で機能するためには、Re:リモートログインとキーチェーンeval \$(ssh-agent)ごとに使用する必要がありました。エイリアス内にない場合はeval $(ssh-agent)バックスラッシュ$なしで)機能します。
トラビス

4

こちらもご覧ください:

security import priv_key.p12 -k ~/Library/Keychains/login.keychain
security import pub_key.pem -k ~/Library/Keychains/login.keychain

...詳細が要求されたときにこのメモを追加します。「security」コマンドは、キー(およびその他のもの)をキーチェーンに直接インポートできます。良い点は、ssh-addとは異なり、キーチェーンを指定できることです。これにより、システムのキーチェーンに直接インポートすることが可能になります(「man security」でその方法を学習します)


1
この回答の詳細を教えてください。ありがとう。
マシューウィリアムズ

1

アップルが意図した最適なソリューション(macOS 10.12.2以降)ここで説明します

したがって、次のことを行ってください。

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


1
>>コマンドを複数回入力すると、使用に危険が伴います。ChrisJF answerで説明されているように、ファイルを手動で編集する方が適切です。
キュー

はい、すぐそこ
ベン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.