はじめに
本ページでは、OSをインストールしたサーバーにSSH機能を導入します。本編では、アイキャッチ画像のように家のLAN内でのみSSH接続ができるようにします。SSHサーバーを導入することで、サーバーのパソコンを遠隔で操作することが可能になります。今回はOpenSSHを利用します。
OpenSSHの導入
まずは、SSHサーバーアプリであるOpenSSH(無料)をインストールします。
- Ubuntuパソコン本体で、ターミナルを開きます。
- 次のコマンドを入力します。
$ sudo apt install openssh-server
エラーが起きなければインストール完了です。
OpenSSHの動作確認
OpenSSHにより、SSH接続が可能になったかを確認しましょう。
- 別途用意したWindowsパソコンを起動し、TeraTerm をインストールします。
- TeraTermを起動し、「ホスト:UbuntuのIPアドレス」「ポート:22」を入力して、「OK」をクリックします。
- 「このホストをknownリストにいれる」にチェックをいれて、「続行」をクリックします。
- Ubuntuサーバーの「ユーザー名、パスワード」を入力し、プレインパスワードでOKをクリックします。
エラーが起きなければ、ローカルネットワーク内におけるSSH接続ができるようになっています。しかし、プレインパスワードによる認証は、 ブルートゥフォースドアタックのような総当たり攻撃を受ければ、第3者により簡単にハッキングされる恐れがあります。もちろん、前編の時点では家のLANからしかアクセスできないので、あまり問題がないことも事実ですが、後編ではWANからアクセスできるようにするので、セキュリティ対策を行います。具体的には、ED25519keyを利用した公開鍵認証でのみ、SSH接続ができるようにします。公開鍵認証って何という方はほかの勇者が書いた記事を読んでね。
ED25519keyの作成
公開鍵認証でSSH接続するための鍵を作成します。
- Windowsパソコンで、デフォルトインストールされている「Windows PowerShell」を起動します。
- PowerShell 内で次のコマンドを入力します。「Enter passphrase」で必ず何らからのパスワードを入力してください。 後の作業でエラーが起きる可能性があります。
PS C:\Users> ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users/.ssh/id_ed25519
Your public key has been saved in C:\Users/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:RMsbRuhWsEU1QKCmGpAVUKZ50h9hqbKr7aFO+aFk0a0 user@PC
The key's randomart image is:
+--[ED25519 256]--+
|.o=.o.o*Boo |
| B ..o.*.. . |
|* o.+...* |
|ooo+..oo o |
|.+...o S |
|.oo . |
|.*.E |
|=oo.. |
|=+o. |
+----[SHA256]-----+
ED25519keyの送信
先ほど作成した鍵を次の手順で、WindowsパソコンからUbuntuサーバーに送信します。
- エクスプローラーにED25519keyが保存されているか確認してください。上の例なら「C:/Users/.ssh/」の場所に、 「id_ed25519, id_ed25519pub」という鍵がありました。
- WindowsパソコンでTeratermを起動し、Ubuntuサーバーにログインしてください。
- Windowsパソコンにある公開鍵「id_ed25519.pub」のみを、Teratermにドラック&ドロップしてください。
- 画面が遷移するので、次の内容を入力してください。
- OKを押すと、公開鍵がUbutuPCにSCP通信で送信されます。
- UbuntuサーバーにSSH接続したTeratermで、次のコマンドを入力します。
$ mkdir .ssh
$ sudo chmod 700 .ssh
$ sudo mv id_ed25519.pub .ssh/authorized_keys
Ubuntuサーバーに公開鍵が、WindowsPCに秘密鍵がインストールされました。
公開鍵認証のみに限定
セキュアなSSH接続環境を確立するため、公開鍵認証以外のSSH接続は拒否するように設定します。
- UbuntuPCにログインしたTeratermで次のコマンドを入力します。
$ sudo nano /etc/ssh/sshd_config
- SSH接続のための設定ファイルが開くので、以下の部分を削除修正します。 変更前(上)、変更後(下)
#変更前
#PermitRootLogin prohibit-password
#PubkeyAuthentication yes
#PasswordAuthentication yes
#変更後
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
- 変更後、「Ctrl+O」を押して「Enterキー」実行で上書き、「Ctrl+X」で設定ファイルを閉じます。
- 次のコマンドを実行し、SSH接続ルールを更新します。
$ sudo systemctl restart ssh
- Teratermをいったん閉じ、再度起動し、IPアドレスとポート番号を入力してください。
- ユーザ認証画面で「ユーザ名、パスワード」を入力した後、パスフレーズ認証ではログインできないことを確認します。
- 次に秘密鍵を使って公開鍵認証によりログインします。設定が正しければ、無事ログインできます。
公開鍵認証でのみSSH接続ができるようになりました。
おわりに
ここまでの作業により家のネットワークからであればSSH接続ができるようになりました。でも、ネットワーク構成図にあるようにこのままでは、家のネットワークからしかSSHサーバーにアクセスできません。外部からもアクセスできるようにするには、次回の記事にあるようなファイヤーウォールやポートフォワーディングの設定が重要になります。次回はまず、ファイヤーウォールの設定から始めましょう。