サーバー同士で公開鍵認証をしてみる

WEB+DBの2台構成のサーバーがあります。それぞれの環境は以下の通りです

WEBサーバー(サーバーA)

  • OS:CentOS7
  • eth0:グローバルIP
  • eth1:192.168.100.2
  • SELinux:無効化

DBサーバー(サーバーB)

  • OS:CentOS7
  • eth0:グローバルIP
  • eth1:192.168.100.3
  • SELinux:無効化

それぞれのサーバーはスイッチで接続されています。さくらのVPSを利用しております

※今後はサーバーA サーバーBと表記しております

公開鍵

公開鍵は普段使っている鍵を使いたいと思います。作成方法はPuTTYgenを使って公開鍵と秘密鍵を作成するで作ったやり方と同じになります

  • 鍵の形式:ed25519
  • パスフレーズ:なし

クライアントからサーバーA、Bへの鍵認証

公開鍵は普段使っている鍵で試してみるので、サーバーA、サーバーBに問題なく接続できます。

サーバー同士はどうなの?

クライアントからサーバーA、サーバーBには接続できますが、サーバーAとサーバーBは鍵認証ではなくパスワード認証でした。セキュリティー的によくないというのもあり、サーバー間も鍵認証にしたいなと思います。今回はサーバーA→サーバーBへの鍵認証となります

サーバー間同士が鍵認証にする必要ある?

今回は二つともeth0がグローバルIPなので困ったらクライアントから接続できます。しかしサーバーAで作業していてサーバーBに移動するとなったらそのまま移動できたらいいなーと思います。ちょっとだけ時短にもなりますがそれよりもそのまま作業に入れるのがありがたいかなと

サーバーAに秘密鍵を送る

送る方法はなんでもいいと思います

  • WinSCPで転送
  • FTPで転送
  • SCPで転送

等お好きな方法で転送していただきたいです。サーバーBには既に公開鍵があります(クライアントから接続するのと同じ鍵を利用するため)

SSHで鍵を指定してみる

秘密鍵を指定してみます。パーミッションは.ssh→700 鍵ファイル→600 となっています

[centos@ik1-401-32566 .ssh]$ ssh -i /home/centos/.ssh/macan centos@192.168.100.3
Enter passphrase for key '/home/centos/.ssh/macan':
Permission denied (publickey).

接続できません。パスワード聞いてきます。パスワードありませんけど・・・

調べる

というわけで色々調べてみたいと思います。SElinuxがオンだとはじかれるというのもありましたが、今回は無効化されているので関係ありません

鍵がペアではない説

もしそうなら、そもそも サーバーA、サーバーBとクライアントでログインできません。 クライアントでサーバーAやBに接続する鍵を同じのを使っているのでペアが違うというのはありません。

パーミッションが適切ではない

パーミッションは設定で変えていますが、状況は変わりません。パーミッション問題でもないです

鍵をCentOSで作成していない説

可能性がありますが、そうなの・・?と思います。

CentOSで鍵を作成してみる

同じ鍵を利用しているのですが、全く繋がらないので諦めてサーバーAで公開鍵、秘密鍵を作成してサーバーBに送りたいと思います

形式は同じ

鍵の形式はRSAではなくEd25519で作成してみます

[centos@ik1-401-32566 ~]$ ssh-keygen -t ed25519 -P "" -f dev.pem
Generating public/private ed25519 key pair.
Your identification has been saved in dev.pem.
Your public key has been saved in dev.pem.pub.
The key fingerprint is:
SHA256:4XCDJF08IHN5uZf66QZdSTti80D+Cd/mjyXmp9sHITM centos@ik1-401-32566.vs.sakura.ne.jp
The key's randomart image is:
+--[ED25519 256]--+
|    +.+=..       |
|     *o.= . .    |
|      o.+= o o   |
|       +.oX E .  |
|        S= X B . |
|        o . = +  |
|         o . oo..|
|          +  o.=o|
|         o.   ==+|
+----[SHA256]-----+

確認

[centos@ik1-401-32566 ~]$ ls -all .ssh/
合計 40
-rw------- 1 centos centos  726  4月  2 16:05 authorized_keys
-rw------- 1 centos centos  432  5月  3 12:45 dev.pem
-rw-r--r-- 1 centos centos  118  5月  3 12:45 dev.pem.pub

ちゃんと作られました

転送

サーバーBに転送します。面倒なのでWinSCPを使いました。

転送をしなくても、サーバーBのauthorized_keysに追記できれば正直やり方は自由です。後から気づいたので、結局サーバーAでcatコマンドで公開鍵を表示し、その内容をコピーしてサーバーBにペーストするやり方をしました。
※転送意味なかったです

接続テスト

接続テストをしてみます

[centos@ik1-401-32566 ~]$ ssh -i /home/centos/.ssh/dev.pem centos@192.168.100.3
Last login: Mon May  3 12:58:17 2021 from 192.168.100.2

SAKURA internet [Virtual Private Server SERVICE]

普通にいけました

えー・・・

まとめ

正直よくわかりません。クライアント側で作った鍵はクライアントが変わっても普通に接続できるので、サーバー間でもいけると思ったのですが駄目でした。とりあえずできたのでよしとするか・・

個人支援・寄付について

サイトラボではBuildreeの開発などのため、現在個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではkyashというサービスをつかっております。ビットコインでも受け付けております。