SSHによるリモートログイン

【連載コラム:Linuxを学ぼう(8)】
サーバーを扱う上で必須と言える技術が「Linux」。今回は、前回のネットワーク接続の流れからSSHでのリモートログインの設定について解説します。

最終更新日:2023年09月15日

サーバーを管理する上で必須の技術「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サーバーをインストールする

第18回:典型的なネットワークトラブルについて理解する

第17回:ネットワークの状態確認を理解する

第16回:アクセス権に関わる様々なことについて理解を深める

第15回:ファイルのアクセス権を理解する

第14回:パッケージをアップデートする dnf編

第13回:PAMを理解する

第12回:グループとは何かを理解する

第11回:sudoコマンドについて理解する

第10回:suコマンドで特権ユーザーになる

第9回:ユーザー権限を理解する

第8回:SSHによるリモートログイン

第7回:Linuxインストール後にやること

第6回:Linuxイストールの実際

第5回:Linuxインストールの準備

第4回:Linux学習のためのネットワーク環境

第3回:学習環境を用意する

第2回:Linuxをどう学ぶのか

第1回:Linuxを学ぼう

ページトップへ