macOS Sierraはリブート間でSSHキーを記憶していないようです


184

macOSにアップグレードしてからこのコマンドを実行する必要があります。

ssh-add -K

再起動後に問題を修正しますが、コンピューターにログオンするたびにこのコマンドを実行する必要があります。

上記のコマンドを実行しない場合、キー入力~/.sshはスキップされ、接続を確立するためにサーバーパスワードが要求されます。


1
$ ssh-add -K私に与えるssh-add: illegal option -- K
-modius

1
後に秘密鍵のパスを入力する必要があり-Kます。解決策については、@ JakeGouldの回答を参照してください。
-bisherbas

10.12.2アップデートにより、不要なサーバーパスワードリクエストがいくつか削除されました。ssh-add -Kを実行する必要がなくなる場合があります。
旅の見知らぬ人

また、を参照してくださいapple.stackexchange.com/questions/48502/...
ベンCreasy

回答:


216

macOS Sierra 10.12.2の時点で、Apple は問題の「適切な」解決を可能にするというssh_configオプションを追加しましたUseKeychain。以下を~/.ssh/configファイルに追加します。

Host *
   AddKeysToAgent yes
   UseKeychain yes     

ssh_config man10.12.2 のページから:

UseKeychain

macOSでは、特定のキーを使用しようとするときに、システムがユーザーのキーチェーン内のパスフレーズを検索するかどうかを指定します。ユーザーがパスフレーズを提供する場合、このオプションは、パスフレーズが正しいことを確認したら、キーチェーンに保存するかどうかも指定します。引数は「yes」または「no」でなければなりません。デフォルトは「no」です。


2
このリンクによると:openradar.appspot.com/27348363 Appleは、「この分野での主流のOpenSSHと[彼らの]動作を再調整」しています。
ThomasW

15
Appleが大多数の開発者に問題を引き起こすように振る舞いを変更したのは不合理です(GitHubは他に何もプッシュしないため)、そして誰にも何も言わなかったのです!
mluisbrown

9
IdentityFile ~/.ssh/id_rsaは冗長であり、必要ではないと思います(デフォルトのオプションを見るとき)。私のssh設定ファイルでそのオプションを設定したことはありません。
therealmarv 16

9
@JakeGould IMOの変更~/.ssh/config~は、sshレベルで問題を解決するので望ましいです。.bash_profileシェルを使用せずにsshを使用してGUIクライアントでmodが機能することを100%確信することはできません。
mluisbrown 16

7
Apple は、その変更に関するテクニカルノートTN2449を公開しました。
ケンゾー

106

Capistranoを使用してコードを展開しようとしたときにも、この問題が発生しました。とてもイライラします。この問題に対処するために私が知っている2つの方法があります。

方法1:すべての既知のキーをSSHエージェントに追加ます。

そこで私が見つけた解決策の1つは、次のように、キーチェーンに保存されたパスフレーズを使用して既知のすべてのIDをSSHエージェントに追加ssh-addする-Aオプションを実行することです。

ssh-add -A

これは機能しますが、再起動しても持続しません。このことを二度と心配したくない場合は、次の~/.bash_profileようにユーザーのファイルを開いてください。

nano ~/.bash_profile

そして、この行を一番下に追加します:

ssh-add -A 2>/dev/null;

これで、新しいターミナルウィンドウを開くと、すべてがうまくいくはずです!

方法2:キーチェーン内のSSHキーのみをエージェントに追加します

そのため、このssh-add -Aオプションはほとんどの基本的なケースで機能するはずですが、最近一般的なものに加えて6-7個のVagrantボックス(アクセスにSSHキー/ IDを使用)がセットアップされているという問題に遭遇しましたid_rsa.pub

簡単に言えば、サーバーアクセスはパスワードに基づいており、SSHキー/ IDはSSHキー/ IDであるため、SSHキー/ IDに基づく試行の失敗が多すぎるため、リモートサーバーからロックアウトされました。そのため、SSHエージェントはすべてのSSHキーを試行しましたが、失敗し、パスワードプロンプトを表示することさえできませんでした。

問題は、そうssh-add -Aする必要がない場合でも、必要なすべてのSSHキー/ IDをエージェントに任意に追加するだけであるということです。Vagrantボックスの場合など。

多くのテストを行った後の私のソリューションは次のとおりでした。

最初に、必要以上に多くのSSHキー/ IDがエージェントに追加されている場合- ssh-add -l次に示すように、エージェントからそれらをすべてパージします。

ssh-add -D

それが完了したら、次のようにバックグラウンドプロセスとしてSSHエージェントを起動します。

eval "$(ssh-agent -s)"

今、それは奇妙になります、そして、私は理由があまりわかりません。場合によっては、次のように~/.ssh/id_rsaキー/アイデンティティをエージェントに明確に追加できます。

ssh-add ~/.ssh/id_rsa

パスフレーズを入力してヒットするReturnと、準備が整います。

しかし、他のケースでは、単にこれを実行するだけで、キー/アイデンティティを追加するのに十分です:

ssh-add -K

それがすべて機能する場合は、入力するssh-add -lと、1つの孤立したSSHキー/ IDが一覧表示されます。

いいですか 次を開きます.bash_profile

nano ~/.bash_profile

そして、この行を一番下に追加します。-Aバージョンがある場合はコメントするか削除してください:

ssh-add -K 2>/dev/null;

これにより、起動/再起動のたびにSSHキー/ IDがSSHエージェントにリロードされます。

更新:Appleは現在UseKeychain、オープンSSH構成オプションにオプションを追加しssh-add -A、解決策も検討しています。

macOS Sierra 10.12.2の時点で、AppleはUseKeychain SSH構成用の構成オプション追加しました。(を介してman ssh_config)manページを確認すると、次の情報が表示されます。

UseKeychain
        On macOS, specifies whether the system should search for
        passphrases in the user's keychain when attempting to use a par-
        ticular key. When the passphrase is provided by the user, this
        option also specifies whether the passphrase should be stored
        into the keychain once it has been verified to be correct.  The
        argument must be ``yes'' or ``no''.  The default is ``no''.

これは追加のいずれかのような溶液を見てアップルに沸くssh-add -Aあなたに.bash_profile 、このオープンレーダーチケットに説明するように、または追加するUseKeychainユーザーごとのオプションの一つとして~/.ssh/config


4
@modius:pwで保護されたキーがある場合は、ssh-add -K [path to key]プロンプトが表示されたらpwを入力します。キーチェーンはパスワードを保存し、その後ssh-addはそこから取得します。
ティモ

2
-Aは、キーチェーンに保存されているパスフレーズを使用してエージェントにIDを追加するためのものです。さらにパスフレーズのないIDがある場合は、-Aオプションを省略してエージェントに追加する必要があります。
エヴァンポン

12
ただ、これにもう少し可視性を追加するために、Appleが含まれるようにssh_configのmanページを更新しているUseKeychainAddKeysToAgent自動的にあなたはssh_configからあなたの鍵を追加します。シェルスクリプトは必要ありません。10.12.2
ライアンギボンズ

1
@JakeGould私はあなたが言っていることを得ることができます、私は実際に彼らがしていることを好きです。パスフレーズをキーチェーンに自動的に保存してブート時にロードする代わりに、セキュリティを制御できます。/ shrug
ライアンギボンズ

1
@RyanGibbons FWIWは、から公式の提案を見てAppleデベロッパリレーションズ OpenRadarにこの回答に:「あなたが実行することによって、かなり簡単にこの問題を解決することができssh-add -A。あなたはあなたの鍵は常にロードされるようにしたい場合は、あなたのrcスクリプトに」 ¯\_(ツ)_/¯
JakeGould

16

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

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

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


私はこの答えを追加しています:

  • 他の回答では、IdentityFile ~/.ssh/id_rsa行を追加するように指示されていますが、キーを自動ロードするためにそのオプションは必要ありません別のホット)。
  • 受け入れられた回答にはUseKeychainが記載されていますがssh-agent、再起動後もキーを保持するには不十分です。

1
2番目の点について。あなたはどれだけ確かですか?再起動しても実際には何も起こらず、参考資料にも記載されていません。上記の構成で起こることは、SSHクライアントが最初の接続時にキーをエージェントロードし(そしてキーチェーンからパスフレーズを取得する)、キーがロードされたままになることです。あなたは経由して右の再起動後にキーをリストすることによって、この文を確認することができssh-add -L、それが報告されますThe agent has no identities。接続するまで何もありません。ザ・はAddKeysToAgentどのような方法で、再起動の間で鍵を保持されません!
ダニラ・ヴァーシニン

15

あなたに役立つかもしれないこのトピックについての短い投稿を書きまし

解決策はssh-add -A、すべての起動時にコマンドを呼び出すことです。

.plist次の内容のファイルをパスに追加~/Library/LaunchAgents/するか、Lingonアプリで作成します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>ssh-add-a</string>
    <key>ProgramArguments</key>
    <array>
        <string>ssh-add</string>
        <string>-A</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

<!-- @@@@LingonWhatStart:ssh-add -A@@@@LingonWhatEnd -->

8

macOS 10.12.2以降、このUseKeychainオプションを使用できます。 もっとここで読むかを調べますman ssh_config

     UseKeychain
         On macOS, specifies whether the system should search for passphrases in the user's keychain
         when attempting to use a particular key. When the passphrase is provided by the user, this
         option also specifies whether the passphrase should be stored into the keychain once it has
         been verified to be correct.  The argument must be ``yes'' or ``no''.  The default is ``no''.

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

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


1
>>コマンドを複数回入力した場合、使用すると危険になります。mluisbrown answerまたはChrisJF answerで説明されているように、ファイルを手動で編集することをお勧めします
キュー

あなたはそこにいます:
ベン

4

それssh-add -Kは私に「違法な選択肢-K」を与えたことがわかりました。これは、ssh-addが/ usr / local / bin(brewによってインストールされたもの)からの奇妙なバージョンだったためです。/ usr / binにあるssh-addの特定の使用により、キーを追加できました。

/usr/bin/ssh-add -K ~/.ssh/id_rsa

これは、長年にわたって簡単に仕事に失敗した後、私のために働いたものです。
ナイクシー

4

以前にこの問題がありましたが、これを回避する方法を見つけました。という名前のファイルを作成しましたconfig、私の中で~/.ssh:私は次の行を追加したフォルダを、

Host github.com
HostName github.com
IdentityFile ~/.ssh/github
IdentitiesOnly yes

理由はわかりませんがHostHostName両方が重要です。私の場合、そのうちの1つが存在しない場合、ソリューションは機能しませんでした。

その後、私はちょうどやったssh-add -Kし、再起動後も動作していました。


1
ホストは、特定のサーバーのユーザー定義の名前/エイリアスであり、サーバーごとにエントリを区別します。HostNameは、github.comのようなサーバーのネットワークアドレス可能な名前を示しますが、IPアドレスも使用できます。HostとHostNameは同じである必要はありませんが、はい、両方ともssh config形式に不可欠です。
マークフォックス

4

異なるバージョンのsshを使用している場合(たとえば、homebrewを使用してインストールした場合)、上記のソリューションはそのままでは機能しません。たとえば、ファイル内AddKeysToAgent yesおよびApple以外のsshバージョンでは認識されず、エラーが発生します。以下のために同じかUseKeychain yes.ssh/config-A-Ksshクライアントのオプションについてもです。

つまり、@mluisbrownの答えはまったく機能しません。@JakeGouldの回答の方法1を使用して、macOS ssh-addユーティリティを明示的に使用して、.bash_profileすべてのキーをキーチェーンに追加できます。

/usr/bin/ssh-add -A

上記コメントで述べたように、最初にキーチェーンにキーを追加する必要がある場合があります。/usr/bin/ssh-add -K .ssh/github


2

〜/ .ssh / configを修正してすべてのホストにUseKeyChainを追加するだけで、この繰り返される悪夢を止めることができます;)

Host *
 UseKeychain yes

ファイルが空であるか存在しない場合は、上記の構成を作成または追加してください。


1

Mac OS X Sierra(10.12.6)にアップデートしました。他のホストにsshできましたが、github.comにはできませんでした。

これは私が〜/ .ssh / configに挿入しなければならなかったものです:

PubkeyAcceptedKeyTypes ssh-dss,ssh-rsa

その変更の後、以前と同様にgithubを使用できました。

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