あまブログ

ドキドキ......ドキドキ2択クイ〜〜〜〜〜〜〜ズ!!

【Linux】SSH公開鍵認証方式の設定手順

はじめに

本稿では、クライアントからSSHでLinuxサーバーに接続する手順を解説します。

リモートのサーバーにローカルPCのSSHクライアントで公開鍵認証方式を使ってログインできるようにします。

実行環境

  • 【SSHクライアント】macOS Monterey:12.3.1
  • 【SSHサーバー】Debian GNU/Linux 11 (bullseye)

手順

以下の手順で進めていきます。

  1. SSHのインストール
  2. パスワード認証方式での設定
  3. 公開鍵認証方式での設定
  4. セキュリティ設定
  5. 追加設定

1. SSHのインストール

サーバー側で以下のコマンドを実行して、OpenSSHをインストールします。

# apt install -y ssh

2. パスワード認証方式での設定

公開鍵認証方式の設定を行うために、一時的にパスワード認証方式でログインできるように設定します。

サーバー側で以下のコマンドを実行して、設定ファイル(/etc/ssh/sshd_config)のバックアップを取ります。

# cp /etc/ssh/sshd_config  /etc/ssh/sshd_config.bk

/etc/ssh/sshd_configのパスワード認証の項目を以下に変更します。

PasswordAuthentication yes

※その他の項目は後で設定します。

SSHサーバーを再起動して設定を反映させます。

# systemctl restart ssh

クライアント側で以下のコマンドを実行して、パスワード認証方式でSSHサーバーにログインできることを確認します。

$ ssh <ユーザ名>@<SSHサーバーのIPアドレス>

3. 公開鍵認証方式での設定

次に公開鍵認証方式の設定を行います。

キーペアの生成

クライアント側で以下のコマンドを実行して、公開鍵と秘密鍵のキーペアを作成します。

$ ssh-keygen -t ed25519

公開鍵:~/.ssh/id_ed25519.pub

秘密鍵:~/.ssh/id_ed25519

※秘密鍵は絶対に流出させてはいけません。

公開鍵の登録

次に、サーバー側に公開鍵を登録します。

ssh-copy-idを使って公開鍵の登録を行います。

クライアント側で以下のコマンドを実行し、ssh-copy-idをインストールします。

$ brew install ssh-copy-id

クライアント側で以下のコマンドを実行し、サーバー側に公開鍵を登録します。

$ ssh-copy-id -i ~/.ssh/id_ed25519.pub <ユーザ名>@<SSHサーバーのIPアドレス>

ssh-copy-idコマンドがやってくれたことを手動で行う場合は、以下のようになります。

# サーバー側で
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

# クライアント側で
$ scp ~/.ssh/id_ed25519.pub <ユーザ名>@<SSHサーバーのIPアドレス>:~/.ssh/authorized_keys

# サーバー側で
$ chmod 600 ~/.ssh/authorized_keys

公開鍵認証方式でログイン

クライアント側で以下のコマンドを実行して、公開鍵認証方式でSSHサーバーにログインできることを確認します。

$ ssh <ユーザ名>@<SSHサーバーのIPアドレス>

4. セキュリティ設定

サーバー側で追加のセキュリティ設定を行います。

/etc/ssh/sshd_configを以下のように編集します。

パスワード認証を無効化

/etc/ssh/sshd_config

PasswordAuthentication no

ChallengeResponseAuthentication no

PermitEmptyPasswords no

rootでのログインを禁止にする

/etc/ssh/sshd_config

PermitRootLogin no

デフォルトの22番ポートでログインできないようにする

/etc/ssh/sshd_config

Port 10022

※ウェルノウンポート以外の任意の番号

最後に、SSHサーバーを再起動して設定を反映させます。

# systemctl restart ssh

以上で終了です。

5. 追加設定

クライアント側の~/.ssh/configを設定して、SSH接続時のコマンドを省略できます。

項目名 説明
Host 任意の接続名(接続するsshのエイリアス名)
Hostname 接続するサーバーのIPアドレスまたはドメイン
User 接続するユーザー名
Port 接続するポート番号
IdentityFile 秘密鍵のファイルパス

例えば~/.ssh/configを以下のように設定すると

Host hoge
    Hostname 192.168.88.211
    User foo
    Port 10022
    IdentityFile ~/.ssh/id_ed25519

SSH接続時のコマンドを以下のように省略できます。

# これが
$ ssh foo@192.168.88.211 -p 10022
# こうなる
$ ssh hoge

【公式ドキュメント】


【参考】