SSHによるリモートログイン
【連載コラム:Linuxを学ぼう(8)】
サーバーを扱う上で必須と言える技術が「Linux」。今回は、前回のネットワーク接続の流れからSSHでのリモートログインの設定について解説します。
サーバーを管理する上で必須の技術「Linux」の学習の仕方を解説するこのコラムの8回目は、前回のLinuxのネットワーク接続の流れからSSHでリモートログインできるように設定することについて解説します。
SSHによるリモートログイン
SSHによるリモートログインは、サーバーの管理を行う上で欠かせない手段です。従来はTELNETプロトコルが使われていましたが、暗号化が行われていない通信経路で単なるパスワード認証を行うセキュアではない方法だったため、現在では使われなくなっています。
SSHにもパスワード認証はありますが、これは初期設定時に使用する一時的なものであり、通常は公開鍵認証を使用します。今回は公開鍵を作成し、公開鍵認証でリモートログインできるようにします。
今回の環境
通常、リモートログインなのでサーバーとクライアントは別々のマシンを用意してネットワークで接続するべきですが、基本的な設定方法を確認するため、簡易的に1台のマシンでも大丈夫な方法で行っています。1台のマシンで実行してもよいですし、複数マシンを用意できる場合には、それぞれサーバーとクライアントで作業を行ってみてください。
SSHクライアント
SSHクライアントは、LinuxやWindows、macOSなどで動作するsshコマンドの他、WindowsのGUIで動作するTera TermやPuTTYなどがよく使われています。それぞれのツールが持つ特徴がありますが、基本的な考え方は同じなので、好みのツールを使うと良いでしょう。今回はどのOSでも共通して使えるsshコマンドで手順を解説します。
パスワード認証での接続テスト
まずパスワード認証で接続できるかテストしておきましょう。sshコマンドにログインしたいユーザー名と接続先を指定して実行します。
$ ssh linuc@192.168.56.102
The authenticity of host '192.168.56.102 (192.168.56.102)' can't be established.
ED25519 key fingerprint is SHA256:M1oU3bEIcOI4darC3vkrtJBn91a5qjHtnz3cZrEo+wE.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes ※yesと入力
Warning: Permanently added '192.168.56.102' (ED25519) to the list of known hosts.
linuc@192.168.56.102's password: ※パスワードを入力
Last login: Sun Dec 11 21:56:59 2022 from 192.168.56.101
[linuc@localhost ~]$ exit ※接続できたので、一旦切断する
ログアウト
Connection to 192.168.56.102 closed.
ここではユーザーlinucで192.168.56.102に接続しようとしています。はじめて接続するサーバーの場合、サーバーの証明書が送られてくるので、これを受け入れるかどうか確認されます。yesと入力して受け入れます。パスワード入力が促されたら、ユーザーlinucのパスワードを入力して認証します。
接続が確認できたら、exitで一旦切断します。
公開鍵の作成
まず認証に使用する公開鍵を作成します。公開鍵は対となる秘密鍵とペアで生成されます。作成にはssh-keygenコマンドを使用します。
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/linuc/.ssh/id_rsa): ※エンターキー
Created directory '/home/linuc/.ssh'.
Enter passphrase (empty for no passphrase): ※パスフレーズを入力
Enter same passphrase again: ※パスフレーズを再入力
Your identification has been saved in /home/linuc/.ssh/id_rsa
Your public key has been saved in /home/linuc/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:Il228WNjVEdhb1ofZg4ja7WNSy3Dm30aOsUmTk44RGI linuc@localhost.localdomain
The key's randomart image is:
+---[RSA 3072]----+
| ..=. |
| E .. o . |
| .+o.. + ++|
| . o =. = @+o|
| . o S.*+ O.+.|
| . . o+o= @ |
| * B...|
| +. o.|
| ... |
+----[SHA256]-----+
最初に鍵の保管場所の入力が要求されますが、デフォルトのままでよいのでエンターキーを入力するだけで構いません。これでユーザーのホームディレクトリの下に.sshディレクトリが作成され、秘密鍵id_rsaと公開鍵id_rsa.pubが作成されます。
秘密鍵は他人に使われてしまうと困るので、パスフレーズを設定して他人に使われないように保護します。パスフレーズを2回入力しておきます。
公開鍵をサーバーに設置する
生成された公開鍵はサーバーに設置しておきます。ssh-id-copyコマンドを使用します。
$ ssh-copy-id linuc@192.168.56.102
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/linuc/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
linuc@192.168.56.102's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'linuc@192.168.56.102'"
and check to make sure that only the key(s) you wanted were added.
サーバー192.168.56.102のユーザーlinucのために生成した公開鍵が設置されました。
公開鍵認証で接続する
再度、sshコマンドでサーバーに接続してみます。パスフレーズが聞かれるので、秘密鍵生成時に指定したパスフレーズを入力します。パスフレーズは手元にある秘密鍵を使えるようにするためのものなので、入力したパスフレーズはサーバーには送信されません。
$ ssh linuc@192.168.56.102
Enter passphrase for key '/home/linuc/.ssh/id_rsa': ※パスフレーズを入力
Last login: Sun Dec 11 22:02:18 2022 from 192.168.56.102
パスフレーズが聞かれたので公開鍵認証に成功しています。また、一度接続しているのでサーバーの証明書の受け入れ確認が行われていないことも確認できます。もしパスワードが聞かれた場合、公開鍵認証に失敗しています。失敗には以下のような理由が考えられます。
- 手元に秘密鍵が無い
- 接続先を間違えている
- ユーザーを間違えている
特に秘密鍵が無い、というミスは分かりにくいので、クライアントを変更した場合などには秘密鍵をコピーしてくるのを忘れないようにしてください。
- 筆者紹介
宮原 徹 氏
Linux標準教科書、Linuxサーバー構築標準教科書などの監修者。LinuCレベル1/レベル2 Version10.0の改訂作業にも協力。また、幅広いOSSに関する情報提供の場として「オープンソースカンファレンス(OSC)」の企画運営も。
バックナンバー
第20回:Webサーバーを動かす
第19回:Webサーバーをインストールする
第17回:ネットワークの状態確認を理解する
第15回:ファイルのアクセス権を理解する
第14回:パッケージをアップデートする dnf編
第13回:PAMを理解する
第12回:グループとは何かを理解する
第11回:sudoコマンドについて理解する
第10回:suコマンドで特権ユーザーになる
第9回:ユーザー権限を理解する
第8回:SSHによるリモートログイン
第6回:Linuxイストールの実際
第5回:Linuxインストールの準備
第3回:学習環境を用意する
第2回:Linuxをどう学ぶのか
第1回:Linuxを学ぼう