1. はじめに

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

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

2. 実行環境

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

3. 手順

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

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

3-1. SSHのインストール

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

# apt install -y ssh

3-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-3. 公開鍵認証方式での設定

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

3-3-1. キーペアの生成

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

$ ssh-keygen -t ed25519

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

秘密鍵:~/.ssh/id_ed25519

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

3-3-2. 公開鍵の登録

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

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

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

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

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

3-4. セキュリティ設定

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

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

3-4-1. パスワード認証を無効化

/etc/ssh/sshd_config

PasswordAuthentication no

ChallengeResponseAuthentication no

PermitEmptyPasswords no

3-4-2. rootでのログインを禁止にする

/etc/ssh/sshd_config

PermitRootLogin no

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

/etc/ssh/sshd_config

Port 10022

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

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

# systemctl restart ssh

以上で終了です。

3-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

【公式ドキュメント】


【参考】