SierraにアップデートしてからmacOSがsshのパスフレーズを尋ねてくる
以前はパスフレーズを覚えていたのですが、今は毎回パスフレーズを聞いてくるようになりました。
ssh-keygen -y -f id_rsa > id_rsa.pub
このコマンドで公開鍵を再生成する必要があると読んだので、それを実行した。
0x1&
でも何も解決しなかった。
以前はパスフレーズを覚えていたのですが、今は毎回パスフレーズを聞いてくるようになりました。
ssh-keygen -y -f id_rsa > id_rsa.pub
このコマンドで公開鍵を再生成する必要があると読んだので、それを実行した。
0x1&
でも何も解決しなかった。
macOSの最新バージョン(10.12.2)では、これは簡単に修正できます。~/.ssh/config
を編集して、UseKeychain
オプションを有効にするだけです。
Host *
UseKeychain yes
他に何も変更する必要はありません。これですべてが最新のアップデート前と同じように動作するようになりました。ssh-agent
にキーを追加する必要はありません。
Edit: パスフレーズを一度入力する必要があるかもしれません。知らない場合は、 以下の手順 に従ってください。
/usr/bin/ssh-add -K
これは、キーチェーンにパスフレーズを保存します。
0x1&
これはキーチェーンにパスフレーズを保存します。これは動作しますが、再起動時には持続しません。このページにある @jukka-suomela さんの解決策は、再起動時にも動作します。その答えはここにあります。 https://superuser.com/a/1158050/234685
正しいパスフレーズを一度だけ入力するだけで、動作し始めました。問題は、元の SSH パスフレーズを覚えていないことでしたが、 以下の手順を Github から:
新しいMacBook ProにEl Capitan以上のSierraをインストールした後、上記の解決策はいずれも動作しませんでした。Sierraは設計上、SSHキーをキーチェーンに保存しません。
2つの解決策がありました。一つは ~/.bash_profile に ssh-add -A &> /dev/null
コマンドを追加することです。ターミナルを開くたびに、このコマンドが実行されます (&> /dev/null
の部分はコマンドの出力を /dev/null というファイルに送ります)。
もっと複雑だけど少し巧妙な解決策は、Saving SSH keys in macOS Sierra keychain で提案されているように、OS が起動するたびに実行されるコマンドを含む plist を作成することです。これにはXcodeを使ってファイルを作成する必要があります。
1つの修正は、以下を ~/.ssh/config ファイルに追加することです。
Host *
AddKeysToAgent yes
IdentityFile ~/.ssh/id_rsa
UseKeychain yes
からの引用: https://www.reddit.com/r/osx/comments/52zn5r/difficulties_with_sshagent_in_macos_sierra/ Also see. https://apple.stackexchange.com/a/264974/3810
今朝、Sierraにアップデートしてから皆さんと同じ問題が発生しました。私の場合は、id_rsa
ファイルが暗号化されていて、復号化したら見事に動いていました。
1.以下のコマンドでid_rsa
ファイルが暗号化されているかどうかを確認します。cat ~/.ssh/id_rsa | head -2
2. 2行目にProc-Type: 4,ENCRYPTED
と書かれていれば暗号化されているので、
3. 重要: オリジナルの id_rsa
ファイルのバックアップを作成してください! コマンド cp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
4. 秘密鍵を openssl rsa -in ~/.ssh/id_rsa -out ~/.ssh/id_rsa.decrypted
で復号化する。元の鍵(rm ~/.ssh/id_rsa
)を削除し、復号化されたものと交換します。mv ~/.ssh/id_rsa.decrypted ~/.ssh/id_rsa
これらの手順の後、再び ssh を使用できるようになるはずです。
ここで複数の回答を試してみましたが、やはりリモートキーの通過に問題がありました(capistrano使用時など)。それを解決するために、アップルのテクノノートを読んで、これを設定ファイルにしました。もうパスワードを聞かれることはありません。 https://developer.apple.com/library/content/technotes/tn2449/_index.html
Host * IdentityFile ~/.ssh/id_rsa IgnoreUnknown UseKeychain UseKeychain yes AddKeysToAgent yes
Capistrano](http://capistranorb.com/)を使用していくつかのコードをデプロイしようとしたときにもこの問題がありました。非常にイライラします。この問題に対処するために、私が知っている2つの方法を紹介します。
私が見つけた解決策の一つは、 ssh-add
を -A
オプションをつけて実行することです。
ssh-add -A
これで動作しますが、再起動しても持続しません。この問題を二度と心配したくない場合は、ユーザーの~/.bash_profile
ファイルをこのように開いてください。
nano ~/.bash_profile
そして、一番下に次の行を追加してください。
ssh-add -A 2>/dev/null;
これで、新しいターミナルウィンドウを開いたときに、すべてがうまくいくはずです!
ssh-add -A
オプションはほとんどの基本的なケースで動作するはずですが、私は最近、より一般的な id_rsa.pub
の上に 6-7 個の Vagrant ボックス(アクセスに SSH 鍵/ID を使用する)をマシンにセットアップしているという問題に遭遇しました。
長い話をすると、サーバへのアクセスはパスワードに基づいており、SSH 鍵/アイデンティティは SSH 鍵/アイデンティティなので、SSH 鍵/アイデンティティに基づいた試行に失敗しすぎたために、リモートサーバから締め出されてしまいました。そのため、SSHエージェントは私のSSH鍵のallを試して失敗し、パスワードプロンプトにもたどり着けませんでした。
問題なのは、ssh-add -A
は必要がなくてもエージェントに持っているすべてのSSH鍵/アイデンティティを任意に追加してしまうということです; 例えばVagrantボックスの場合のように。
テストを重ねた結果、私の解決策は以下のようになりました。
まず、エージェントに追加されている SSH 鍵や ID が必要以上に多い場合は、ssh-add -l
のようにエージェントからそれらをすべて削除します。
ssh-add -D
これが完了したら、次のようにバックグラウンドプロセスとして SSH エージェントを起動します。
eval "$(ssh-agent -s)"
さて、これでおかしくなってきました。場合によっては、次のようにエージェントに ~/.ssh/id_rsa.pub
のキー/ID を追加することができます。
ssh-add ~/.ssh/id_rsa.pub
パスフレーズを入力してReturnを押せば完了です。
ssh-add -K
これでうまくいった場合は、ssh-add -l
と入力してください。
nano ~/.bash_profile
すべて問題ありませんか? では、.bash_profile
を開いてみましょう。
ssh-add -K 2>/dev/null;
そして一番下に次の行を追加してください。
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 エージェントに SSH 鍵/ID を再ロードできるようになります。
-A
のオプションを追加し、UseKeychain
も解決策と考えています。macOS Sierra 10.12.2の時点で、Apple(だと思いますが)はSSHの設定オプションにssh-add -A
を追加しています。manページ(UseKeychain
経由)をチェックすると以下のような情報が表示されます。
0x1&
これは Apple が解決策として、man ssh_config
に ssh-add -A
を追加するか この Open Radar のチケットで説明されているように を追加するか、ユーザごとの .bash_profile
のオプションの一つとして UseKeychain
を追加するかのどちらかだと考えていることを示しています。
Jukka Suomela さんの回答が正しいのですが、openssh
からインストールしたhomebrew
を使っているのであれば、アンインストールも一緒に行う必要があります。
brew remove openssh
…システムのデフォルトのopensshに戻すには、次のようにアンインストールする必要があります: homebrewのものはUseKeychain
のssh設定エントリをサポートしていないので。
macOSの起動時に毎回.plist
を実行するためには、~/Library/LaunchAgents/
に追加されたssh-add -A
ファイルが必要です。
これを実行するコマンドが1つあります( SSH-keys-in-macOS-Sierra-keychain から)。
ここで提案されている解決策をすべて試してみましたが、私のMacにはキーチェーンが設定されていません。
ローカルマシンとリモートマシンの両方で、ファイルの先頭の.ssh/config
に以下の行を追加するとうまくいきました。
PubkeyAcceptedKeyTypes=+ssh-dss