Linux MintでSSHサーバーを構築する手順

Linux

はじめに

ここでは、Linux Mint (64bit)上にある OpenSSHサーバーに Windows機 (64bit) からログインすることを想定して話を進めます。SSH接続に使用するソフトは Simon Tatham氏が開発している PuTTy (パティ) です。あと、自分用の備忘録も兼ねているため少しごちゃごちゃしています。

SSHとは

SSHとは、Secure SHell の略で暗号や認証の技術を利用して安全にリモートコンピュータと通信するためのプロコトルです。

TelnetやFTPなどは、平文でパスワードを送信してしまうため、ネットーワーク上で盗聴されてしまう恐れがあるんですが、SSHではパスワードなどすべての認証がネットワーク上で暗号化されるため、安全に通信することができます。

Linux Mint上にSSHサーバー構築 (サーバー側で鍵作成)

こちらは自宅サーバーなどサーバーが自身の近くにある場合の説明になります。VPSや遠隔のサーバーの場合は後述する「Linux Mint上にSSHサーバー構築 (クライアント側で鍵作成)」をご覧ください。

OpenSSH Server をインストールする

まずは、aptを使ってopenssh server を Linux Mint にインストールします。

$ sudo apt -y install openssh-server

次に、sshd_config を開きます。エディタは何でも良いですが、ここでは nano を使います。

$ sudo nano /etc/ssh/sshd_config

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

#rootでのログインを禁止
PermitRootLogin no

#鍵方式のみログインを許可 (noで鍵が必須になる)
PasswordAuthentication no

#空パスワードのログイン禁止
PermitEmptyPasswords no

#チャレンジ・レスポンス認証禁止
ChallengeResponseAuthentication no

#指定したユーザー(ここでは xerus)のみログインを許可 (不特定多数に接続させないため)
AllowUsers xerus

#暗号強度を 2048bit にする (RSAは 2048bit まで可能。最小値は 512bit)
ServerKeyBits 2048

#任意のポートに変更(標準のポート22では危ないので)
Port 12345

編集した内容を保存したら、以下のコマンドでSSHサービスを再起動します。

$ sudo service sshd restart

Firewall で SSH を通す

HTTPやSSHなど通したいものを ufw allow で通します。

$ sudo ufw enable             # ufwを有効化
$ sudo ufw default DENY       # デフォルトでは全てのアクセスを拒否
$ sudo ufw allow 80/tcp       # httpを通す
$ sudo ufw allow proto tcp from 192.168.1.0/24 to any port 12345  # SSHを通す
$ sudo ufw logging on         # logging を有効化
$ sudo ufw reload             # 再読み込み

最後にちゃんと設定されているか以下のコマンドで確認します。

$ sudo ufw status verbose

RSA認証鍵を作成

以下のコマンドを入力して、鍵を作成し、Enterを押します。

$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa):

パスフレーズを入力します。ここで入力したパスフレーズは後で必要になるのでメモしておきます。

Enter passphrase (empty for no passphrase): <パスワードを入力>
Enter same passphrase again: <再度パスワードを入力 (確認用)>

鍵ペアを確認後 .ssh ディレクトリに移動し公開鍵を authorized_keys に追加します。

// 鍵ペアを確認
$ ls -al ~/.ssh

// ~/.ssh に移動
$ cd ~/.ssh

// 公開鍵をauthorized_keysに追加
$ cat id_rsa.pub >> authorized_keys

ホームに戻ったら、元の公開鍵を削除し、~/.ssh/authorized_keysのパーミッションを変更します。

// ホームに戻る
$ cd

// 元の公開鍵を削除
$ rm -f ~/.ssh/id_rsa.pub

// .sshと公開鍵のパーミッションを変更
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

// 鍵ペアを確認
$ ls -al ~/.ssh
-rw------- 1 yosi yosi 336 Aug 11 21:22 authorized_keys  // 公開鍵
-rw------- 1 yosi yosi 532 Aug 11 21:22 id_rsa           // 秘密鍵

USBなどを挿し込んで、mkdirコマンドでディレクトリを作成します。
そのディレクトリをマウントし、秘密鍵をUSBに移します。
移し終わったら、umountでマウントを解除しUSBを取り外します。

$ mkdir /mnt/usb
$ mount /dev/sdb1 /mnt/usb
$ mv ~/.ssh/id_rsa /mnt/usb
$ umount /dev/sdb*

クライアント側で秘密鍵を読み込む

ここからは、クライアント側 (Windows機)からの操作となります。

PuTTYは海外の方が作られたソフトなので全て英語表記です。日本語化パッチを提供しているサイトがあるようなので、英語が苦手な方は各自日本語化してください。ここでは英語版のまま話を進めます。

まず、以下から putty.exe (64-bit x86)puttygen.exe (64-bit x86) をダウンロードします。
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

puttygen.exe を実行 -> 「Load」を押します
ファイルの種類を [All Files(.)] にします。

クライアントPCに秘密鍵(id_rsa)が入ったUSBを挿入して、秘密鍵(id_rsa)を読み込みます。
RSA認証鍵に作成したパスフレーズを入力し [ OK ] を押します。

Save private key」クリックし、適当な名前を付けて保存
例: private_key

putty.exeでSSHの接続設定をする

次に putty.exe を実行します。
最初は「Session」の画面が表示されるはずなので
Host Name (or IP address) に「ホスト名」か「IPアドレス」を入力します (ここでは192.168.1.10とします)。
Connection type は SSH を選択します。
Port は 自身が設定した任意のポート番号になっていることを確認 (ここでは 12345)
Saved Sessions にも「ホスト名」か「IPアドレス」を入力します。

次に「Connection (接続)」→「Data (データ)」を開きます。
Auto-login username に自動ログインするユーザー名を入力します (ここでは xerus という名前で進めます)

次に「Connection (接続)」→「SSH」→「Auth (認証)」→「Credentials
Private key file for authenticationで保存した秘密鍵(.ppk)を指定します。

最後に「Session」に戻り「Default Settings」を選択して「Save」をクリックし内容を保存します。

Open」をクリックし、RSA認証鍵作成で指定したパスフレーズを入力します。
これでログインできれば、無事完了です。


Linux Mint上にSSHサーバー構築 (クライアント側で鍵作成)

VPSなどを使っている場合はこちらの方法で鍵の作成を行います。

OpenSSH Server をインストールする

$ sudo apt -y install openssh-server

sshd_config を開きます。

$ sudo nano /etc/ssh/sshd_config

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

#rootでのログインを禁止
PermitRootLogin no

#鍵方式のみログインを許可 (noで鍵が必須になるが、ここではまだyesにしておく)
PasswordAuthentication yes

#空パスワードのログイン禁止
PermitEmptyPasswords no

#チャレンジ・レスポンス認証禁止
ChallengeResponseAuthentication no

#指定したユーザー(ここでは xerus)のみログインを許可 (不特定多数に接続させないため)
AllowUsers xerus

#暗号強度を 2048bit にする (RSAは 2048bit まで可能。最小値は 512bit)
ServerKeyBits 2048

#任意のポートに変更(標準のポート22では危ないので)
Port 12345

編集した内容を保存したら、以下のコマンドでSSHサービスを再起動します。

$ sudo service sshd restart

Firewall で SSH を通す

HTTPやSSHなど通したいものを ufw allow で通します。

注: 誤ってSSH接続を拒否しないよう設定時には細心の注意を払ってください

$ sudo ufw enable             # ufwを有効化
$ sudo ufw default DENY       # デフォルトでは全てのアクセスを拒否
$ sudo ufw allow 80/tcp       # httpを通す
$ sudo ufw allow 12345/tcp    # SSHを通す
$ sudo ufw logging on         # logging を有効化
$ sudo ufw reload             # 設定を再読み込み

最後にちゃんと設定されているか以下のコマンドで確認します。

$ sudo ufw status verbose

クライアント側でRSA認証鍵を生成する

ここからは、クライアント側(Winodws機)での操作になります。まず、以下から putty.exe (64-bit x86)puttygen.exe (64-bit x86)pscp.exe (64-bit x86)をダウンロードします。
https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

puttygen.exeを起動し、Type of key to generate (生成する鍵の種類) を「RSA」に、Number of bits in a generated key (生成する鍵のビット数) を「2048」に設定して「Generate (生成)」ボタンを押します。

乱数を生成するために、PuTTYgen上でマウスカーソルをランダムに動かします。

鍵が生成されたら「Key passphrase (鍵のパスフレーズ)」「Confirm passphrase (鍵のパスフレーズの確認)」を入力します。ここで入力したパスフレーズは後で必要になるのでメモしておきます。

Save private key」を押し、秘密鍵を適当なファイル名で保存します。例: private_key

次にメモ帳でも何でも良いので適当なテキストエディターを開き、PuTTYgenの「Public key for pasting into OpenSSH authorized_keys file」にある文字列をコピペしします。この時、途中で改行などが入らないように保存してください。

id_rsa.pub という名前で保存します。

公開鍵をサーバーに転送する

pscp.exe のあるディレクトリでコマンドプロンプトを開く、もしくはコマンドプロンプトを開き cd コマンドを使って pscp.exe のあるディレクトリまで移動します。

そして「ログイン名@サーバー: (ここではxerus@xxx.yyy.jp)」とサーバーのパスワードを入力して id_rsa.pub をサーバーに転送します。ログイン名には sshd_config で設定したユーザー名 (ここではxerus)を指定します。また xxx.yyy.jp の部分はログインするサーバーのホスト名(or IPアドレス)を指定してください。

※注意点として「xerus@xxx.yyy.jp:」というように語尾の「:(コロン)」をつけ忘れないようにしてください。つけ忘れるとリモート環境だと認識されず「Local to Local copy not supported」というエラーが出ます。

>pscp.exe id_rsa.pub xerus@xxx.yyy.jp:
xerus@xxx.yyy.jp's password: <パスワードを入力>

putty.exeでSSHの接続設定をする

上記の過程が完了したら putty.exe を起動します。

最初は「Session」の画面が表示されるはずなので
Host Name (or IP address) に「ホスト名」か「IPアドレス」を入力します (ここでは xxx.yyy.jp とします)。

Connection typeSSH を選択します。
Port は 自身が設定した任意のポート番号になっていることを確認 (ここでは 12345)
Saved Sessions にも「ホスト名」か「IPアドレス」を入力します。

次に「Connection (接続)」→「Data (データ)」を開きます。
Auto-login username に自動ログインするユーザー名を入力します (例では xerus というユーザー名です)。

次に「Connection (接続)」→「SSH」→「Auth (認証)」→「Credentials
Private key file for authenticationで保存した秘密鍵(.ppk)を指定します。

最後に「Session」に戻り「Default Settings」を選択して「Save」をクリックします。
Open」をクリックし、パスワードを入力してサーバーにログイン後、以下のコマンドを入力します。

// .sshディレクトリを作成
$ mkdir ~/.ssh

// パーミッションを変更
$ chmod 700 ~/.ssh

$ cat ~/id_rsa.pub > ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

// 不要になった id_rsa.pub を削除
$ rm -f ~/id_rsa.pub

sshd_config を開きます。

$ sudo nano /etc/ssh/sshd_config

PasswordAuthenticationyes から no にして、鍵方式のみログインを許可します。

PasswordAuthentication no

最後にsshdを再起動させます。

$ sudo service sshd restart

これにより次回からログインする際は、RSA認証鍵作成で指定したパスフレーズを入力することになります。

参考にさせていただいたサイト様

はじめての自宅サーバ構築 - Fedora/CentOS - SSHサーバの構築(OpenSSH)
自サーバ(FedoraまたはCentOS)とクライアント間の通信内容を暗号化する為のSSHサーバ構築方法
404 Not Found
RSA公開鍵認証の有効化とパスワード認証の無効化
/etc/ssh/sshd_configを編集して、RSA公開鍵認証の有効化と各種の制限を行い、セキュリティを強化する。順番は前後するが、目的別に見ていく。 まず、RSA公開鍵認証の有効化。sshd_configの#RSAAuthentic...
PUTTYGEN での鍵生成と公開鍵のサーバへの転送 | 全学計算機システム (Zengaku Computer System) – 筑波大学 学術情報メディアセンター
公開鍵認証によるSSH接続 - PuTTYの使い方 - Linux入門 - Webkaru
Windows対応のSSHクライアントPuTTYを利用した、パスワード認証によるSSH接続について解説します。
AWS PuTTYでのSSHファイル転送ではまったところ - Qiita
windows上からAWSで起動しているLinux2のインスタンスのディレクトリへファイルを転送したい…

コメント