一応、身分としては大学関係者なんだが、viも使いこなせない大学生(それもほぼ女子)にLinuxをボランティアで教えている。。学部は完全に文系なのだが、ITに興味を持つ学生もいて、さらにITに就職をする人がいる。
Linuxの演習用として、自身が管理するVMが大量にあるのだが、いよいよクラウドにお引越しとなった。移行先は、格安のAWSのARMインスタンス。(なので、最近ARMインスタンスの記事を書いたw)
さて。。。今まではパスワード認証でSSHをやってもらっていたが、そろそろ証明書認証をデビューをしてもらわなければならない。実際、ガチインフラのエンジニアでも証明書認証を実は知らなかったりするので証明書の使い方を今回は記載する。このブログは教えている女子大生は絶対読んでくれるが、それ以外は、知っている常識か、絶対に手を出さないのではと思う。。。
閑話休題
なぜ証明書認証を使うのか?
- パスワードを入力する必要がない
- パスワードの管理をする必要がない。パスワードを忘れても知らなくてもOK。
パスワードを入力管理をする必要がないというのは、パスワードの攻撃を受けることもない。証明書だけきっちり管理をする必要がある。これに似たケースとして、sudoも同じことが言える。
MacやLinuxでパスフレーズなしで証明書鍵を作ると(パスフレーズを入れる場合、接続元はSSH Agentを起動しておく必要がある。SSH Agentの話はまた別の機会に。)
ssh-keygen -t rsa
~/.ssh 配下にid_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成される。
Linuxへの鍵の転送なら、
ssh-copy-id -i ~/.ssh/id_rsa.pub username@<hostname>
とするとパスワード認証されたのちに公開鍵が~/.ssh/authorized_keysに自動的に転送、列記されて晴れて
ssh username@<hostname>
とすると、パスワードなしでログインできるようになる。
これだけなんだが、ガチインフラおじさんは、Puttyを使っていることがあるので(WSLのUbuntuを知らない。)、この鍵のセットをWindowsのputtyやWinSCPで使う話も書いておく。自分もガチガチのインフラおじさんだが、残念ながらMACユーザー。なので、以下のキャプチャーはWindows 11 ARM版からのキャプチャーとなる。
Puttyをインストールする。msiで入れると全てはいる。
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
日本語化パッケージもある。
https://www.ranvis.com/putty
id_rsa (秘密鍵)を接続元であるWindows端末にコピーをする。ちゃんと安全な方法で転送して欲しい。テキストファイルなので、内容のコピペでも実は構わない。
puttygen.exe (putty key generator)を起動する。Load an existing private key fileのLoadをクリックしてid_rsa(秘密鍵)を指定
以下の画面になるので、Save private keyをクリック
パスフレーズがないけどいいかと聞いてくるけど、とりあえずいい。入れてもいいけど、SSH Agentを起動して鍵を登録しておく必要がある。
Puttyフォーマットの秘密鍵を適当な名前で保存。拡張子がppkになる。
これで完了。
puttyで使う場合
Connection -> DataにあるAuto-login usernameに公開鍵が転送してあるユーザのログイン名を入力
Connection -> SSH -> Authにある Private key file for authenticationに、ppkファイルを指定。
これで接続をすると、パスワードは聞かれない。Profileを名前をつけて保存をしておけば便利。Profileにホスト名まで付けておくと、WinSCPに設定をインポートができる。
ちなみに、/etc/ssh/sshd_configを以下のようにしないとパスワード認証ができてしまうので、注意
PasswordAuthentication no
ちなみにちなみに、PermitRootLogin prohibit-passwordを有効にすると、rootユーザーに対して証明書認証ができる。これは地味に便利。ただ証明書が流出したらアウトなので設定は自己責任で。
ここまで書いても証明書認証を使わないのであれば、ガチなパスワード認証の人で讃えるわ。それでもfail2banを必ずインストールすべき。
apt -y install fail2ban