sshfsでサーバを別PCから自動マウントさせたかったので、秘密鍵使ったssh接続をできるようにする必要が出てきた。んでいろいろ調べて孤軍奮闘したので自分のためにメモを残しておく。どうもクライアント先で秘密鍵と公開鍵を作成して公開鍵をscp等使ってサーバに転送するのがセキュリティ上と本来の秘密鍵の使い方上、一般的っぽいけど今回はサーバPCの近くにいたのとセキュリティ向上目的じゃないので鍵の作成作業は全部サーバPC上で直接行って秘密鍵はいつでもどこでも使えるようにクラウドに置いとくことにします(真似しないでね)。
まずはsshd_configの確認
$ cat /etc/ssh/sshd_config | grep AuthorizedKeysFile
以下のようになってればおk。デフォルトでコメントアウトされているが、”/etc/ssh/sshd_config”の最初からコメントアウトされているものはデフォルト値なのでなにもいじらなくていい。以下のパスはホームディレクトリから見たときのパスになる模様?
$ #AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
Code language: PHP (php)
秘密鍵と公開鍵を作る
以下のようにして”.ssh”ディレクトリをホームディレクトリ直下に作成したあとに”ssh-keygen”コマンドで秘密鍵と公開鍵を作成。”-t”オプションは暗号化方式の指定で、”-f”はファイル名と保存先の指定、”-f”で指定しない場合は”.ssh”が自動的に作られてそこに”id_暗号化方式”のファイル名で作られる。詳しいsshのオプションはこ↑こ↓参照してどうぞ。巷ではrsa形式がよく使われるっぽいし、無指定でもrasになるっぽいけどed25519が最強らしいのでそちらを使うことにする。
$ mkdir ~/.ssh; cd .ssh
$ ssh-keygen -t ed25519 -f id_ed25519.key
すると秘密鍵の”id_ed25519.key”と公開鍵の”id_ed25519.key.pub”ってファイルが生成される。
id_ed25519.key.pubをauthorized_keysにリネーム
$ mv id_ed25519.key.pub authorized_keys
最初に”sshd_config”の中身を確認したときに”authorized_keys”というファイルが指定されていたのでそれに合わせる。多分sshd_configの方を生成されたファイル名に合わせても動くんだろうけどみんな”authorized_keys”にリネームしてるっぽいので。あと次から公開鍵を新しく作った場合はその公開鍵の中身を”authorized_keys”に追記すればいいらしい。
クライアントに秘密鍵を渡す
あとはクライアントが秘密鍵を使って以下のようにsshでログインするだけです。生成したid_ed25519.keyをUSBなりクラウドなりファイルサーバなり、自分がセキュアだと思う手段で渡しましょう
$ ssh -i ~/.ssh/id_ed25519.key user@host
Code language: JavaScript (javascript)
パスワードでもログインできる件
このままだとパスワードログインできますが俺の場合は正直パスワードログインできてもいいのでそのままです。パスワードログインをできないようにしたい場合は”/etc/ssh/sshd_config”に”PasswordAuthentication no”っと書けばおk。