はじめに
ここでは、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 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」をクリックし、パスワードを入力してサーバーにログイン後、以下のコマンドを入力します。
// .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
PasswordAuthentication を yes から no にして、鍵方式のみログインを許可します。
PasswordAuthentication no
最後にsshdを再起動させます。
$ sudo service sshd restart
これにより次回からログインする際は、RSA認証鍵作成で指定したパスフレーズを入力することになります。
コメント