Centos9 で ssh の パス付鍵 を設定する流れ [TeraTerm, WinSCP]
まえおき
linuxはcentos
CentOS Stream 9はうっとおしいのでcentos9と呼びます。
sshのログインが上手くいかない時、ログをチェックしますが、「/var/log/auth.log」をみると書いてある記事はcentosではなくDebianやUbuntuです。
centosの場合は「/var/log/secure」です。
Win環境でcentosサーバで開発する最も多い環境下
とても多い環境下なので、明示しておきます。で、コンソールもPuTTYまんまの人はそれでいいし、rLoginはしらん。TeraTermの人は、実はテラタームで鍵生成できるので、それが無難と思います。でWinSCPを使う人も結構多いはずで、その場合はsshはPuTTY形式しか読み込めないみたいです。とはいえWinSCPは、その場でPuTTY形式のファイルを新規で生成してくれるので...
Macとかlinuxサーバ間の場合はサーバ上のssh-keygenコマンドとかでいいと思います。ちなみに今回の方法で、Macのコンソールからもsshログイン可能です。
鍵生成、設置、ログインテストの簡易フロー
- TeraTermでキーを生成。
- サーバの「.ssh/authorized_keys」にpublicのテキストを設置
- privateは分かりやすいように例えば「ドキュメント/key/ip/private.tera.key」みたいにおいておく
- これでテラでログインを確認
- WinSCPで上の鍵で強引にログインを設定。するとPuTTY形式に変換を促されるのでそのまま作成して「ドキュメント/key/ip/private.winscp.key」とかみたいにしておく
はい。PuTTYはいるのか分かりません。WinSCPに内包されている?のであればインストールも不用かも
キミは何も考えずにRSAにするの?
ここで記事を引用します。私は暗号学者でもないので、保証も何もしないんですが、なんかRSAって時代と共に1024 -> 2048 -> 4096って増えてるじゃないですか?ようはいずれ破られる形式で肥大化してるってこと。
RCCS では Ed25519, ECDSA (256, 384, 521 ビット), RSA 4096ビット※の鍵を推奨しています。
特にこだわりが無いようでしたら、Ed25519をご利用ください。
EdDSAは比較的新しい暗号であるため、RSAやDSAに比べると実装や互換性の面で劣りますが、高いパフォーマンスやセキュリティを持っており、公開鍵基盤業界は徐々にEdDSAに移行しつつあるとMody氏は指摘しています。
ここでは互換性を謳われていますが、我々は無事目的のサーバにログインできればいいんですよね?つまり互換性云々は問題ありません。なので「Ed25519(EdDSA)」でいこうぜって話です。
フロー
テラタームで鍵をつくろう
もう詳細はサイト紹介で済まします。
このとき、ED25519で、パスワードを付けて生成します。保存先のパソコン上のディレクトリは事前に用意しておきましょう。で、一旦お目当てのディレクトリに公開鍵と、秘密鍵を保存します。秘密はパソコンで、サーバに公開を設置します。
設定のSSH鍵生成で行います。
パスワードやコメントは生成ボタンを押してから記入できます。
目的のサーバに公開鍵を追加しよう
すでにここまでで気づくと思いますが、ED25519はテキストが短いです。お目当てのサーバのユーザアカウントの「.ssh/authorized_keys」にそれを追記します。なければ新規作成です。新規の場合は、 「.ssh」は700「authorized_keys」は600 にしないと権限エラーで弾かれます。余談ですが、authorized_keysって命名はsshの規定でそう決まっているルールです。基本的なことですが、通常?各自鍵を設置するので、新規でない場合、上書きしないように注意してください。
[***** ~]$vi .ssh/authorized_keys
ssh-ed25519 AAA....
ログインテストしよう
さすがに説明いらないと思うので、テラタームでsshでログインテストして問題ないか確認します。パス付きでも問題ありません。
WinSCPでもログイン設定をしてしまおう
キャプチャないですが、テラタームと同じ秘密鍵を指定するとPuTTY形式しかサポートしてないから形式換えていいか?ってアラートがでるのでOKしてそのまま保存します。それでテストしてみてください。ログイン出来たら完了でっす。
おまけ「/etc/ssh/sshd_config」
一般的なサーバ構築時のサーバログインの制限例
# vi /etc/ssh/sshd_config
...
# PermintRootLogin noでrootの直ログインを禁止
PermitRootLogin no
...
# PubkeyAuthentication yesでssh2ログインを許可
PubkeyAuthentication yes
...
# PasswordAuthentication noでパスワードログインを禁止
PasswordAuthentication no
あとがき
これでもって「通常のSSH鍵形式」+「PuTTY形式の鍵」を両方用意できた感じになりますね。だいたいこれでどんな開発環境でも対応できるのでは?centos9と書きましたがあまりこのOSバージョンだからって記事でもないです。EdDSAでいきましょうとか今風ならこうだねってことで。
Discussion