Linux – Ubuntu で SSH 接続を有効にする方法

目次

概要

Ubuntu で SSH 接続を有効にするための手順について説明します。 SSH 接続を使用すると、リモートマシンに安全にアクセスすることができます。

関連記事

SSH 接続を有効にする手順

1. SSH サーバーのインストール

Ubuntu では初期状態で SSH サーバーはインストールされていません。 まず、SSH サーバーである openssh-server をインストールします。

sudo apt update
sudo apt install openssh-server

2. SSH サーバーのステータスを確認

SSH サーバーが正しくインストールされた場合、ssh.service が動作します。 サービスが動作しているか確認します。

sudo systemctl status ssh

active (running) と表示されていれば、SSH サーバーが正常に動作しています。

もし起動していない場合、システム起動時に自動的に起動するように設定します。

sudo systemctl enable ssh
sudo systemctl start ssh

3. SSH 接続の確認

別のコンピュータから SSH 接続を試みます。以下のコマンドを使用してリモートマシンに接続します。

ssh username@ip_address

username は接続先のユーザー名、ip_address は接続先の IP アドレスです。

SSH の設定ファイル

必要に応じて、SSH の設定ファイル /etc/ssh/sshd_config を編集してカスタマイズできます。例えば、デフォルトのポート番号を変更したり、ルートログインを無効にするなどの設定が可能です。

sudo vim /etc/ssh/sshd_config

変更を加えた後、SSH サーバーを再起動して設定を適用します。

sudo systemctl restart ssh

SSH 接続に必要なパーミッションの設定方法

SSH の設定はデフォルトで StrictModes on になっています。StrictModes は、SSH (Secure Shell) の設定オプションの一つで、SSH サーバーのセキュリティ強化に関する設定です。このオプションは、SSH サーバーがユーザーのホームディレクトリと認証に使用されるファイル (例: ~/.ssh/authorized_keys) のパーミッションをチェックし、必要なセキュリティポリシーを満たしていない場合に接続を拒否するかどうかを制御します。公開鍵認証を使用する場合、以下のディレクトリのパーミッションが適切に設定されているか確認してください。

ディレクトリまたはファイル パーミッション
~ 700
~/.ssh 700
~/.ssh/authorized_keys 600

以下のコマンドを実行して、適切なパーミッションを設定します:

USERNAME=$(whoami)
# ユーザーのホームディレクトリのパーミッションを変更
chmod 700 ~
chown $USERNAME:$USERNAME ~

# .ssh ディレクトリのパーミッションを変更
chmod 700 ~/.ssh
chown $USERNAME:$USERNAME ~/.ssh

# authorized_keys ファイルのパーミッションを変更
chmod 600 ~/.ssh/authorized_keys
chown $USERNAME:$USERNAME ~/.ssh/authorized_keys

この設定を行うことで、SSH 接続時のセキュリティが強化されます。

公開鍵認証によるログインを有効にする

1. [クライアント側] 公開鍵と秘密鍵のペアを作成する

まず、クライアント側で SSH キーを生成します。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  • -t rsa: RSA アルゴリズムを使用
  • -b 4096: 鍵のビット数
  • -C "your_email@example.com": キーのコメント (通常はメールアドレス)

このコマンドを実行すると、以下のような出力が表示されます:

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:nz/AUfpqWGMQ79upWtJjMj7Cby0+UJASTU4H24qIzZQ your_email@example.com
The key's randomart image is:
+---[RSA 4096]----+
|    .++o.        |
|   ..o++.   .    |
|  E  .o..o o     |
| = . . .o +      |
|. + . ..S+ o     |
|      .  oB..    |
|     . .+=B* .   |
|      o.**=o+    |
|       ==*....   |
+----[SHA256]-----+

デフォルトでは、鍵は ~/.ssh ディレクトリに保存されます。プロンプトが表示されますが、すべて Enter を押下してデフォルトの設定を使用します。

  • 秘密鍵: ~/.ssh/id_rsa
  • 公開鍵: ~/.ssh/id_rsa.pub

2. [クライアント側] 公開鍵をサーバーにコピーする

次に、生成された公開鍵をサーバーにコピーします。

ssh-copy-id username@hostname
  • username: サーバーのユーザー名
  • hostname: サーバーのホスト名または IP アドレス

プロンプトが表示されたら、サーバーのパスワードを入力します。 このコマンドは、クライアント側の ~/.ssh/id_rsa.pub ファイルの内容をサーバー側の ~/.ssh/authorized_keys ファイルに追加します。

3. [サーバー側] SSH 設定を確認・変更する

サーバー側の SSH 設定を確認し、必要に応じて変更します。

  1. サーバーに SSH でログインします。
ssh username@hostname
  1. SSH 設定ファイル /etc/ssh/sshd_config を開きます。
sudo vim /etc/ssh/sshd_config
  1. 以下の設定が有効になっていることを確認します。
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
  1. SSH サービスを再起動して設定を反映させます。
sudo systemctl restart sshd

4. [サーバー側] ファイルのパーミッションの確認

公開鍵認証が正しく機能するためには、ファイルのパーミッションが適切に設定されている必要があります。

USERNAME=$(whoami)
# ユーザーのホームディレクトリのパーミッションを変更
chmod 700 ~
chown $USERNAME:$USERNAME ~

# .ssh ディレクトリのパーミッションを変更
chmod 700 ~/.ssh
chown $USERNAME:$USERNAME ~/.ssh

# authorized_keys ファイルのパーミッションを変更
chmod 600 ~/.ssh/authorized_keys
chown $USERNAME:$USERNAME ~/.ssh/authorized_keys

5. [クライアント側] 公開鍵認証でログインできるか確認する

ssh username@hostname

パスワードの入力を求められずにログインできれば、公開鍵認証の設定は成功です。クライアント側に鍵が複数ある場合、-i オプションで対応する鍵を指定します。

ssh username@hostname -i <秘密鍵のパス>

ログアウトする場合、logout または exit と入力するか、Ctrl + D を押下します。

パスワード認証を無効にする

公開鍵認証が正しく機能していることを確認した後、パスワード認証を無効にする場合は、以下の設定を変更します。

sudo vim /etc/ssh/sshd_config
PasswordAuthentication no

設定を変更したら、SSH サービスを再起動して設定を反映させます。

sudo systemctl restart sshd

これで、SSH 接続に必要な設定は完了です。

ECDSA key fingerprint

SSH で初めてリモートサーバーに接続する際に、以下のメッセージが表示されます。

$ ssh user@example.com
The authenticity of host 'example.com (192.0.2.1)' can't be established.
ECDSA key fingerprint is SHA256:abcdef1234567890abcdef1234567890abcdef12.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

これは、リモートサーバーのホストキーを確認し、接続先が信頼できるかどうかを判断するためのメッセージです。 ホストキーの確認に使用される ECDSA (Elliptic Curve Digital Signature Algorithm) key fingerprint は、公開鍵の一意な識別子を提供するために使用される短いハッシュ値です。一般的に、MD5 や SHA-256 などのハッシュ関数が使用されます。指紋は元の公開鍵に比べて短いため、簡単に表示および比較できます。これにより、公開鍵が改ざんされていないか確認する際に役立ちます。 yes を入力してログインすると、クライアント側の ~/.ssh/known_hosts にそのサーバーの fingerprint が保存されます。

Warning: Permanently added 'example.com,192.0.2.1' (ECDSA) to the list of known hosts.

次回同じリモートサーバーにアクセスする際は、fingerprint が一致するかどうか認証が行われます。

コメント

コメントする

目次