Blog Article

Ubuntuでサーバー構築4|SSH設定

はじめに

本ページでは、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サーバーにアクセスできません。外部からもアクセスできるようにするには、次回の記事にあるようなファイヤーウォールやポートフォワーディングの設定が重要になります。次回はまず、ファイヤーウォールの設定から始めましょう。