RSA暗号で公開鍵と秘密鍵を作成してSSHログインしてみよう
こんにちは。アイシーティーリンクの遠藤と申します。
私は30代に突入後、前職サービス業からの未経験でIT業界へ入り、現在は会計系システムのヘルプデスク業務に携わっております。まだまだ無知なことも多いですが、これからも地道に精進していきたいと思います。
※早速ですが、タイトルでお気付きの方もいらっしゃると思いますが、前日の弊社記事と内容が被りました(^^;)急遽新しい題材で書く力が枯渇している為、二日間同様の内容となりますことをご容赦ください。
ちなみに前日の記事【Linuxサーバ構築】セキュリティ対策はとても分かりやすいので是非お読み頂けたらと思います(^^)
本記事もついでに、この人はこんな風に鍵を作成しているんだなぁと温かい目で見て頂けますと幸いです。
■本記事のゴール
RSA暗号で公開鍵と秘密鍵を作成し、公開鍵認証にてSSHでログインが出来る。
今回は鍵の作成に加え、rootログインとパスワード認証を禁止してセキュリティの高い設定をしていきます。
パスワード認証では、手当たり次第に試され認証を突破されてしまう、いわゆる総当たり攻撃と呼ばれる不正ログインの可能性もゼロではありません。
SSHのログインをより安全にしましょう。
■環境情報メモ
ホストOS:Windows 10 Pro
仮想化ソフトウェア:Oracle VM VirtualBox
Linuxディストリビューション:CentOS Linux 7
※本記事ではCentOS7のインストールが完了しており、rootログインが出来る状態からのスタートとなっております。
また作業はTeraTermにて行います。
■RSA暗号とは
まずRSA暗号って何だろう?ということでWikiさん、お願い致します。
RSA暗号(RSAあんごう)とは、桁数が大きい合成数の素因数分解問題が困難であることを安全性の根拠とした公開鍵暗号の一つである。
出典: フリー百科事典『ウィキペディア(Wikipedia)』
素因数分解問題を深堀りしようとした所くじけそうでしたので、今回は要点をさっくりまとめます。
★ポイント①★
RSA暗号が安全な暗号化技術であるとされているのは、桁数の大きい数の素因数分解が難しいという性質から、秘密鍵が特定されにくいため。
★ポイント②★
桁数が多くなればコンピュータでも素因数分解は難しくなるため、暗号が破られにくい=通信の盗聴を防げる=安全。
■公開鍵暗号方式とは
公開鍵暗号方式では「公開鍵」と「秘密鍵」の二つの鍵を使用して暗号化と復号化を行います。
公開鍵は、暗号化するための鍵で、人に知られても良いオープンな鍵。
秘密鍵は、復号化するための鍵で、人に知られてはいけないとっても大切な鍵。
★ポイント★
公開鍵によって暗号化されたデータを復号できるのは、公開鍵と対になっている秘密鍵のみ。
★メリット★
パスワードが分かれば誰でもログインができてしまうパスワード認証に対して、公開鍵暗号方式では秘密鍵を持っている人だけが限定してログインが出来る。
■ちょこっと整理
今回必要になるのは、サーバー側に置く公開鍵と、自分のPC側に置く秘密鍵になります。
今回はサーバー側で直接鍵を作成します。
それでは早速鍵を作成してみましょう!
■設定
・公開鍵と秘密鍵の作成
鍵の作成には「ssh-keygen」コマンドを実行します。
【書式】ssh-keygen [オプション] -t 鍵タイプ [-N 新しいパスフレーズ] [-C コメント] [-f 鍵ファイル]
manコマンドで見ると、dsa,ecdsa,ed25519,rsa,rsa1が作成可能な鍵のようですね。
ssh-keygen [-q] [-b bits] [-t dsa | ecdsa | ed25519 | rsa | rsa1]
[-N new_passphrase] [-C comment] [-f output_keyfile]
今回作成する鍵の種類「rsa」を-tオプションで指定します。
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): //鍵の保存先はどこにする?(今回はそのままEnter押下)
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): //鍵のパスフレーズは何にする?(今回はそのままENTER押下)
Enter same passphrase again: //鍵のパスフレーズもう一回入れて?(今回はそのままENTER押下)
Your identification has been saved in /root/.ssh/id_rsa. //秘密鍵出来たよー!
Your public key has been saved in /root/.ssh/id_rsa.pub. //公開鍵出来たよー!
The key fingerprint is:
SHA256:+AB1cgpTreECptU79NymfkZngS6DQzz/wI1xSioKmsE root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
| .o.+.o |
| + o+.=. |
| + +.=.+ . |
|. B.B.= . |
|. . XoXS . |
|oE. + Xo+ o |
|o+ . o *.o |
|+ . + |
| o |
+----[SHA256]-----+
鍵の作成が完了しました。.sshディレクトリをlsコマンドで見てみましょう。
[root@localhost ~]# cd .ssh
[root@localhost .ssh]# ls -al
-rw-------. 1 root root 1675 7月 30 10:32 id_rsa
-rw-r--r--. 1 root root 408 7月 30 10:32 id_rsa.pub
鍵が作成されていますね。
id_rsaが秘密鍵、id_rsa.pubが公開鍵です。
id_rsaはクライアント側に置く秘密鍵になりますので、自分のPCに持ってきます(今回はWinSCPを使用)
次にユーザ「endo」を作成し、.sshディレクトリを作成しました。その下に公開鍵(id_rsa.pub)を配置します。
※このようにします→/home/endo/.ssh/id_rsa.pub
cp -p id_rsa.pub /home/endo/.ssh/
「id_rsa.pub」を「authorized_keys」にリネームします。
mv id_rsa.pub authorized_keys
権限変更します。
chmod 600 authorized_keys
chmod 700 .ssh
.sshの所有者を「root」から「endo」に変更します。
[root@localhost endo]# chown -R endo:endo .ssh
するとこうなります。
drwx------. 2 endo endo 29 7月 30 10:45 .ssh
-rw-------. 1 endo endo 408 7月 30 10:37 authorized_keys
・configファイルの設定(公開鍵暗号方式の設定)
あと少し、ラストスパートです!(^^)
「sshd_config」ファイルを編集します。
[root@localhost ~]# vi /etc/ssh/sshd_config
//rootの直接ログインを禁止します
PermitRootLogin no
//公開鍵認証を有効にします
PubkeyAuthentication yes
//パスワード認証を禁止します
PasswordAuthentication no
設定が完了したので、再起動します。
systemctl restart sshd
以上で設定作業は完了です。お疲れ様でした。それでは一度ログアウトしてログインを試してみましょう。
■SSHログインしてみよう
まずrootでログインしようとすると、認証に失敗します。
こちらは設定通りの正しい動作です。
次に、作成したユーザで秘密鍵を使ってログインしてみます。
ドキドキ…(*'ω'*)
無事に秘密鍵を使ってログインすることが出来ました!
■まとめ
公開鍵と秘密鍵のイメージは人それぞれだと思いますが、私は家の鍵穴と鍵のイメージで捉えています。この鍵穴に合う鍵はこれしかない!という風に秘密鍵はたった一つしかない大切な鍵です。
勿論誰かに渡したり複製すれば合鍵のように秘密鍵は作れてしまうわけですが、合鍵をむやみに渡してはいけませんよね。アカウントを守ることがシステムを守る事に繋がるのだと思います。
普段ブログを書くことはないので乱雑ではありましたが、最後までご覧いただきありがとうございます。また、今回参考にさせて頂いたサイトはこちらです。ありがとうございました。
RSA暗号とは?仕組みや応用事例を初心者にもわかりやすく解説!
sshキー(秘密鍵・公開鍵)の作成と認証 流れ
ssh-keygenコマンドの使い方
ではまた!
この記事が気に入ったらサポートをしてみませんか?