macOS SierraでSSH接続できないホストがある件

SierraにしたMacBookにメインのMBPから鍵ファイル一式をコピーして、リモートのサーバーに接続しようとしたところ・・・

Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 

Oh・・・

しかし普通に接続できるサーバーもあって、よく分からない。
色々調査に時間を食われる羽目になった。

結論から言うと一部のサーバーとの接続にDSAの鍵を使い続けていたためだった。(さすがに鍵ファイルのパーミッションが600でないとかそう言う初歩的なことではない)
macOSセキュリティ強化の一環として1024bitの鍵までしか作れないDSAは利用できなくなっている。

参考: Apple、macOS SierraでOpenSSH v7を採用。いくつかのレガシーな暗号が無効に。

自分としてはかなり前に2048bitのRSAの鍵に切り替えていたつもりだったが、DSAの鍵のまま接続していたケースが残っていたらしい。

SierraでDSA鍵を使う方法

.ssh/configに以下の一行を足す。

HostKeyAlgorithms +ssh-dss

あくまでその場しのぎに。
長い目で見るならばこの設定は使わず、これを機にRSA鍵に乗り換えておくのがよい。

RSA鍵に乗り換える

RSAで鍵を作って全てのサーバーに公開鍵を登録。
地味にコツコツと。

AnsibleやChefで管理しているものはクックブックやプレイブックに含まれている公開鍵を置き換え。

DSA鍵を無効に

また使い続けることのないように無効化。一応捨てないでリネームして取っておく。
known_hostsを眺めてめぼしいホストにはRSAで接続するようにしたが、万一漏れがあると締め出し食らってしまうので。

# mv id_dsa id_dsa.outdated
# ssh-add -d /Users/akahige/.ssh/id_dsa

ssh-add -dはリネームしてもキャッシュしているid_dsaを使い続けていたために実行。
これやらなくても再起動すればいいのかも。

確認

# ssh -vT www.example.com

以下のようにRSA鍵の方を使っていることが確認できればOK。

debug1: Offering RSA public key: /Users/akahige/.ssh/id_rsa

逆にDSAの鍵を使っているようならNG。

debug1: Offering RSA public key: /Users/akahige/.ssh/id_dsa

前の記事

MacBookのための多機能ドングル

次の記事

Let’s Encryptを使ってみた