2020-01-26 / @syui

ios / ios

iosのgoodreaderでsftpのprivate-keyが読み込めない問題

opensshのsftpが前提です。

iosのgoodreaderでsftpのprivate-keyが読み込めませんでした。

これはmacのssh-keygenで作成されるコマンドの出力が変更されているので、昔作ったキーでは読み込めますが、新しく作ったキーは読み込めなかったのです。よって、キーを作り直すか、キー自体を編集することで解決。

問題の答え

# 公開鍵、秘密鍵の作成
$  ssh-keygen -t rsa -b 4096 -m PEM -f ~/.ssh/goodreader

# serverにpublic-keyを登録
$ ssh-copy-id -i ~/.ssh/goodreader.pub [email protected] -p 22

# ~/.ssh/goodreader
# このprivate-keyをiosのgoodreaderに持っていく

問題の内容

私はいつもこんな感じでssh-keyを登録したり、変更したりします。単純ですね。

$ ssh-keygen -f ~/.ssh/$KEYNAME
$ ssh-copy-id -i ~/.ssh/$KEYNAME.pub user@localhost

簡単に説明すると、サーバーの/etc/ssh/sshd_configにて設定される.ssh/authorized_keysに公開鍵が登録される仕組み。

この公開鍵に対応する秘密鍵を共有すれば、大抵はサーバーにアクセスできる。よって、iosのgoodreaderにもこんな感じで使える秘密鍵(.ssh/authorized_keysに書いた公開鍵に対応するやつ)を使えばアクセスできるはずなんですが、できなかった。

$ cat ~/.ssh/private-key
-----BEGIN OPENSSH PRIVATE KEY-----
$ cat ~/.ssh/private-key-old
-----BEGIN RSA PRIVATE KEY-----

デフォルトは、RFC 4716 - The Secure Shell (SSH) Public Key File Format のフォーマット。これは RFC で定められた秘密鍵のフォーマットだ。

これまで使われていた PEM フォーマットは、Privacy-Enhanced Mail - Wikipedia にもあるとおり、もともとセキュアなメールシステムの RFC 向けに開発された。 しかし、これらの RFC は一つのルート認証局の PKI に基づいたもので、運用の問題で実現することがなかった。

しかし、PEM というフォーマットは秘密鍵、公開鍵のフォーマットとして広く使われたようだ。

RFC 4716 のような仕様が策定され、今回のようにデフォルトの出力も切り替えられているため、PEM もいよいよその役割を終えるのかもしれない。

https://amasuda.xyz/post/2019-07-27-ssh-keygen-openssh-to-pem/

goodreaderはこの辺対応していない感じ?なので、macのデフォルトで作ったキーが使えないためハマる人とか多そう。(自分もハマった