Linux に SSH キーベースの認証を実装する
SSH (Secured Shell) は、SSH クライアントとリモート サーバーの間に暗号で保護された接続を作成するプロトコルです。
SSH を使用すると、リモート サーバーを安全に管理および管理できます。これはさまざまな面で役立ちます。
- マルチサーバー展開
- サービスをリモートで停止/開始する
- オートメーション
そしてあなたの創造性のすべてを(できれば)…
システム管理者として、これは知っておくべき基本事項です。
その方法を学びましょう…
秘密鍵と公開鍵を生成します。秘密キーは ssh クライアント マシンに保存し、安全に保管する必要があります。パスワードを必要とせずに SSH クライアント マシンからリモート サーバーにログインするには、公開キーをリモート サーバーにコピーする必要があります。
以下のことを学びます。
- SSH をインストールします (すでにインストールされている場合は必要ありません)
- SSHキーを生成する
- SSHキーをリモートサーバーにコピーします
- SSHを使用してリモートサーバーにログインします
デモンストレーションの目的で、以下の IP アドレスを持つ 2 つのサーバーがあり、1 つのシステムはクライアント、もう 1 つはクライアント マシンから ssh 経由でログインするサーバーです。
- クライアント (ユーザー -> ) : 192.168.56.102
- リモート (ユーザー -> ubuntu) : 192.168.56.101
SSHのインストール
この記事で説明されている手順に従う前に、
openssh-server
サーバーにインストールされていることを確認してください。インストールされていない場合は、以下のコマンドを実行してインストールします。
sudo apt-get install openssh-server
sudo systemctl enable ssh
sudo systemctl start ssh
ssh コマンドを実行して、システムにインストールされているかどうかを確認できます。
@:~$ ssh
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
[-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
[-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
[-i identity_file] [-J [user@]host[:port]] [-L address]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-Q query_option] [-R address] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] destination [command]
SSHキーを生成する
これはクライアント サーバーで行う必要があります。
ssh-keygen
コマンドを実行して SSH キーを生成します。ファイル、パスフレーズ、同じパスフレーズを要求されたら Enter キーを押すだけです。デフォルトでは、~/.ssh ディレクトリにキーのペアが生成されます。 Id_rsa は秘密キー、id_rsa.pub は関連公開キーです。
@:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home//.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home//.ssh/id_rsa.
Your public key has been saved in /home//.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:3XDm62tzJegGm8oAmFYCyeFZovJOuU42zNgyn9GzH30 @
The key's randomart image is:
+---[RSA 2048]----+
|o+.. |
|+o+ |
|oo. . . o |
|.. * . * |
| B . S . o. |
| O o . . . ... .|
|+ @ o o . E=. o |
| B + o + .o.= . |
| + ... o. oo+ |
+----[SHA256]-----+
~/.ssh
ディレクトリに 2 つの新しいファイルが生成されます。
SSHキーをリモートサーバーにコピー
秘密キーはリモート サーバー上の
~/.ssh
フォルダーにコピーする必要があります。ほとんどのサーバーにはこのフォルダーがすでに存在するはずです。存在しない場合は、フォルダーを作成する必要があります。
そして、そのためには:
-
接続したいユーザーでリモートサーバーにログインします。私の場合は
ubuntu
です - 現在の作業ディレクトリがユーザーのホーム ディレクトリであることを確認し、.ssh フォルダーを作成します。次の 1 つのコマンドを使用して、次のコマンドを作成することもできます。
mkdir -p ~/.ssh
すでに .ssh フォルダーがある場合は、そのバックアップを作成します。
次に、クライアント サーバーから公開キーをプッシュしましょう。
クライアント マシン (192.168.56.102) で以下のコマンドを実行して、リモート サーバーの .ssh ディレクトリ内の
authorized_keys
ファイル内の公開キーをコピーします。
@:~$ cat .ssh/id_rsa.pub | ssh ubuntu@192.168.56.101 'cat >> .ssh/authorized_keys'
ubuntu@192.168.56.101's password:
以下のコマンドを実行して、リモートサーバー上のauthorized_keysファイルにアクセス許可を設定します。
@:~$ ssh ubuntu@192.168.56.101 "chmod 700 .ssh; chmod 640 .ssh/authorized_keys"
これでキーが交換され、許可がすべて設定されました。
SSHを使用してリモートサーバーにログインします
動作するかどうかテストしてみましょう!
クライアントマシン (192.168.56.102) からリモートサーバー (192.168.56.101) に ユーザーとしてログインしてみましょう。
以下のコマンドを実行してテストします。今回はパスワードを要求されません。
@:~$ ssh ubuntu@192.168.56.101
Welcome to Ubuntu 16.04.6 LTS (GNU/Linux 4.4.0-151-generic i686)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
346 packages can be updated.
11 updates are security updates.
Last login: Mon Jun 17 00:10:32 2019 from 192.168.56.101
どうぞ…
リモートサーバーに正常にログインしました。以下のコマンドを実行すると、リモート マシンの IP の詳細が表示されます。
ubuntu@ubuntu:~$ ifconfig
enp0s3 Link encap:Ethernet HWaddr 08:00:27:9b:47:86
inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0
inet6 addr: fe80::5c62:3267:b752:fe5d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:20239 errors:0 dropped:0 overruns:0 frame:0
TX packets:5406 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:22678039 (22.6 MB) TX bytes:701710 (701.7 KB)
enp0s8 Link encap:Ethernet HWaddr 08:00:27:a9:4a:6b
inet addr:192.168.56.101 Bcast:192.168.56.255 Mask:255.255.255.0
inet6 addr: fe80::54a9:761c:9034:21a2/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:330 errors:0 dropped:0 overruns:0 frame:0
TX packets:197 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:42847 (42.8 KB) TX bytes:32774 (32.7 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:997 errors:0 dropped:0 overruns:0 frame:0
TX packets:997 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:79654 (79.6 KB) TX bytes:79654 (79.6 KB)
結論
ご覧のとおり、SSH キー交換のセットアップは非常に簡単です。これがあなたのお役に立てば幸いです。Linux 管理とトラブルシューティングの学習に興味がある場合は、この Udemy コース をチェックしてください。