0
0

公開鍵・秘密鍵の設定

Posted at

はじめに

ここでは、サーバ間で通信を行うための鍵設定を行う。
あるサーバからあるサーバへ通信を行うのは基本である。

最も基本的な通信は、相手サーバのIPアドレスを指定してユーザ名・パスワードを以って認証を行いログインする方法である。

しかし、システムを構築した際などはパスワードレスな通信が望ましい。
なぜなら、1つ1つの通信処理でユーザ名・パスワードを聞いていると処理が煩雑になってしまうから。

そのため、今回はそんなパスワードレスでも安全性を確保した通信手段である公開鍵・秘密鍵の仕組みを使ってssh(Secure Shell)接続を確立したい。

前提条件

2台のUbuntuのHWのセットアップが完了している。
それぞれのサーバ名・IPアドレス・ユーザ名・パスワードがわかっている

今回は、ez770-client(192.168.56.100)というサーバからez770-node1(192.168.56.101)への通信を試みる。

まず、鍵登録せずに通信を行う

まずは、clientからnode1サーバに対してssh通信を行ってみることにする。
こちらが正常にできない場合、鍵登録以前に接続設定等に問題がある可能性が高い。

接続設定に問題無いことがわかれば、あとは鍵登録すればよいだけなので問題も切り分けやすい。

ClinetサーバからNode1にssh接続する

一例として、clientサーバからnode1にssh接続する。
その際、以下の準備が整っている必要がある。

  • clientサーバにログインできること
  • node1のIPアドレスを知っていること(hostsファイルに登録が済んでいたらサーバ名でOK)
  • node1のユーザ名・パスワードを知っていること
  • ufwがsshポートにてclientサーバを許可している もしくはoffになっていること

が条件となる。

今回行う接続について、node1のIPアドレスは、192.168.56.101である。(これはプライベートIPと呼ばれる。)
ユーザ名:maitne パスワード:mainte で接続を行う。

接続するためのコマンドは以下

[実行コマンド]
mainte@ez770-client:~$ ssh mainte@192.168.56.101

[fingerprintの作成有無を聞かれる]
The authenticity of host '192.168.56.101 (192.168.56.101)' can't be established.
ECDSA key fingerprint is SHA256:X7wdsVdgQ7RzgVdz+NAfUaqJTXuFD7qlu3hr8Oi/ce8.
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

[入力内容]
yes

[結果]
Warning: Permanently added '192.168.56.101' (ECDSA) to the list of known hosts.
mainte@192.168.56.101's password: 
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-31-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Tue Jul 16 05:23:36 AM UTC 2024

  System load:  0.0                Processes:               287
  Usage of /:   5.3% of 193.83GB   Users logged in:         1
  Memory usage: 1%                 IPv4 address for ens160: 192.168.56.101
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


Last login: Tue Jul 16 02:54:44 2024 from 192.168.56.100
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

mainte@ez770-node1:~$ 

一番下の行にてホスト名がez770-node1と表示されているので、接続できることを確認できた。

Key Setting

Clientサーバで鍵を作成する

以下のコマンドはSSHキーの生成に使用される。
具体的には、RSAアルゴリズムを使用して4096ビットの鍵を生成し、鍵のコメントとして「id_rsa」を設定し、生成された鍵ファイルを特定のパスに保存する。

このコマンドが実行されると、公開鍵暗号方式の鍵ペア(公開鍵と秘密鍵)が生成される。

一旦/tmpに鍵を作成する。

[実行コマンド]
sudo ssh-keygen -t rsa -b 4096 -C "id_rsa" -f /tmp/id_rsa

[鍵に設定するパスフレーズを聞かれる]
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): 

[入力内容]
(何も入力しない)

[間違えないように再度パスフレーズを聞かれる]
Enter same passphrase again: 

[入力内容]
(何も入力しない)

[結果]
Your identification has been saved in /tmp/id_rsa
Your public key has been saved in /tmp/id_rsa.pub
The key fingerprint is:
SHA256:XDQt8ijhvcvH+25kSDvhqdENBnQb6yobPrJxTJZW2ak id_rsa
The key's randomart image is:
+---[RSA 4096]----+
|       .. =.     |
|      . o=.*.    |
|     . oo=*.     |
|      o+o+*      |
|      =.E*.B     |
|     =  o.B +    |
|    . =..= +     |
|    .+.++ o .    |
|    .oo. ..=o    |
+----[SHA256]-----+

となり鍵が作成された。

一応、/tmpフォルダ内を参照することで作成されているか確認する。

ll /tmp/
total 68
drwxrwxrwt 15 root root 4096 Jul 16 09:05 ./
drwxr-xr-x 23 root root 4096 Jul 16 05:00 ../
(略)
-rw-------  1 root root 3369 Jul 16 09:05 id_rsa
-rw-r--r--  1 root root  737 Jul 16 09:05 id_rsa.pub

となり、id_rsa(秘密鍵)とid_rsa.pub(公開鍵)が作成されていることが分かった。
中身も確認してみる。

秘密鍵id_rsaの中身

[実行コマンド]
sudo cat /tmp/id_rsa

[結果]
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
NhAAAAAwEAAQAAAgEArSPp68aiU7mVyPmdOvINXkvFyE8cyNJ5EMHI9sjpDWNFU4JndJcb

公開鍵id_rsa.pubの中身

[実行コマンド]
sudo cat /tmp/id_rsa.pub 

[結果]
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCtI+nrxqJTuZXI+Z068g1eS8XITxzI0nkQwcj2yOkNY0VTgmd0l
...
lwf1dBYpQ== id_rsa

clientからnode1にmainteユーザでログインするための鍵登録を行う

鍵を作成できたので、次はclientサーバからnode1にmainteユーザでログインできるように鍵の登録を行う。

ここでいうmainteユーザとは、node1のmainteユーザのことである。
各ノードでmainteを作ってしまったためややこしくなっているが、説明の中のユーザはどのサーバが所有しているか認識しながら進んでもらえるとより良い。

やることは、client側・node1側でそれぞれ1つずつある。

clientサーバに秘密鍵を登録する

まず、先ほど作成した秘密鍵を自分のホームディレクトリ/home/mainte/.ssh配下にコピーする。
.sshディレクトリはサーバ間通信を行い際の認証情報に関するファイルなどを格納する。

[実行コマンド]
sudo cp /tmp/id_rsa /home/mainte/.ssh/

[確認コマンド]
ll /home/mainte/.ssh/

[結果]
(略)
-rw------- 1 mainte mainte    0 Jul 16 05:10 authorized_keys
-rw------- 1 root   root   3369 Jul 18 00:49 id_rsa
-rw------- 1 mainte mainte 2098 Jul 16 05:50 known_hosts
...

現在の、id_rsaの所有者見てほしい。
所有者・所有グループがともにrootとなっている。
また、root以外のファイル権限が---となっている。
これは、root以外ファイルを参照もできないことを示している。

そのため、一旦root以外でもファイルを参照できるようにしておく。

[実行コマンド]
sudo chmod 775 /home/mainte/.ssh/id_rsa 

[確認コマンド]
mainte@ez770-client:~$ ll /home/mainte/.ssh/id_rsa

[結果]
-rwxrwxr-x 1 root root 3369 Jul 18 00:49 /home/mainte/.ssh/id_rsa*

これで、id_rsaをmainteユーザでもsudo権限無しで参照できるようになった。

次に、/home/mainte/.sshディレクトリ配下に「config」というファイルを作成し、接続情報と秘密鍵の参照情報を登録する。

configファイルの書き方は、以下である。
このように記載することで、サーバが接続情報と秘密鍵の場所を認識できるように設定する。

Host [ホスト名]
  HostName [ホスト名]
  User [ユーザ名]
  Port [ポート番(22)] 
  IdentityFile [秘密鍵の場所指定(/home/mainte/.ssh/id_rsa)]
  StrictHostKeyChecking no

それでは、configファイルを作成する。

[実行コマンド]
vi /home/mainte/.ssh/config

[入力内容]
Host ez770-node1
  HostName ez770-node1
  User mainte
  Port 22
  IdentityFile /home/mainte/.ssh/id_rsa
  StrictHostKeyChecking no

これで、clientサーバからnode1にmainteユーザでの接続を試みる際、/home/mainte/.ssh/id_rsaの秘密鍵が参照されるようになった。
一旦、この状態でnode1への接続を試みてみる。
まだ、node1に公開鍵を登録していないので、エラーになるはずだがエラー内容には鍵の参照ログがでるかもしれない。

[実行コマンド]
ssh mainte@ez770-node1

[結果]
Load key "/home/mainte/.ssh/id_rsa": Permission denied
mainte@ez770-node1's password: 

やはり、鍵が認証されずにパスワードが要求された。
しかし、configに登録した内容をもとに秘密鍵が参照されていることが分かった。

node1サーバに公開鍵を登録する

次に、node1側に公開鍵を登録する。
公開鍵は、/home/mainte/.ssh/ディレクトリ配下にある authorized_keysというファイルに登録する。
これは、clientサーバ側で作成した公開鍵の内容をそのままauthorized_keysにコピペすればいい。

[clientサーバ側で公開鍵情報を表示]
mainte@ez770-client:~$ less /tmp/id_rsa.pub 

[結果 内容をコピー]
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCtI+nrxqJTuZXI+Z068g1eS8XITxzI0nkQwcj2yOkNY0VT...

[node1サーバ側でauthorized_keysを開き、公開鍵情報をペースト]
mainte@ez770-node1:~$ vi /home/mainte/.ssh/authorized_keys 

[入力内容]
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCtI+nrxqJTuZXI+Z068g1eS8XITxzI0nkQwcj2yOkNY0VT...

[確認コマンド]
mainte@ez770-node1:~$ cat /home/mainte/.ssh/authorized_keys 

[結果]
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCtI+nrxqJTuZXI+Z068g1eS8XITxzI0nkQwcj2yOkNY0VT...

これで、node1サーバへの公開鍵登録が完了した。

それでは、clientからnode1に接続できるか確認する。

ssh mainte@ez770-node1
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-31-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/pro

 System information as of Thu Jul 18 01:14:39 AM UTC 2024

  System load:  0.0                Processes:               290
  Usage of /:   5.3% of 193.83GB   Users logged in:         1
  Memory usage: 1%                 IPv4 address for ens160: 192.168.56.101
  Swap usage:   0%


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status

Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings


Last login: Thu Jul 18 01:13:03 2024 from 192.168.56.100
mainte@ez770-node1:~$ hostname
ez770-node1

今後は、client,node1-4まで同様の設定を行い相互にパスワードレス接続可能な状態にする。
また、clientからnode1にrootユーザでログインするための鍵登録も行いたい。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0