この記事はTera TermからFreeBSDのサーバにSSH接続するための設定方法と接続のやり方を紹介しています。
SSHとは
SSH(Secure Shell)は、ネットワークに接続されたコンピューターと安全に通信を行う為のプログラム(サービス)です。
今まではTELNETやFTPなどのプログラムを使用して通信を行っていましたが、これらのプログラムはパスワードやメッセージなどの通信データが平文(暗号化されていない生のデータ)でネットワーク上に流れるため、盗聴のリスクがありました。
SSHは公開鍵と秘密鍵の2つの鍵を利用してデータの暗号化を行い、安全性を高めた通信を行います。これにより盗聴のリスクを軽減させています。
特にインターネットを経由するような通信では必須です。
このブログもサーバ側のコマンド操作やファイルの転送にSSHを使って通信しています。
余談ですが、このブログを立ち上げた直後からroot, admin, supportなどのキーワードで何度も不正にログインを試みようとしているメッセージがログに記録されています。
しかも数秒に1回程度という信じられないくらい大量のメッセージが記録されているのでログファイルのローテーションも考える必要があります。
[参考]
sshd[54432]: error: maximum authentication attempts exceeded for root from 36.35.136.75 port 54653 ssh2 [preauth] sshd[69807]: error: maximum authentication attempts exceeded for invalid user admin from 115.224.199.65 port 40499 ssh2 [preauth] sshd[59681]: error: maximum authentication attempts exceeded for invalid user ubnt from 221.5.29.95 port 34809 ssh2 [preauth] sshd[79130]: error: maximum authentication attempts exceeded for invalid user support from 99.228.65.132 port 51895 ssh2 [preauth]
このように 今時のインターネットでTELNETやFTPで通信するのは 大変危険な行為です。
SSHの仕組み
SSHの仕組みを簡単に説明すると、上の図のようになっています。
公開鍵と秘密鍵は2つでセットの鍵になっています。ちょうど南京錠の錠前と鍵のような関係です。 公開鍵で暗号化したデータは秘密鍵でしか復号できません。逆に秘密鍵で暗号化したデータは公開鍵でしか復号できません。
この性質を利用して安全な通信を実現しています。
※正確にいうと秘密鍵で暗号化するのではなく、「秘密鍵の所有者が秘密鍵で電子署名を発行し、その電子署名が正しいか公開鍵で検証する」というイメージのようです。また、秘密鍵の中には公開鍵の情報も含まれているそうです。この辺りの情報を色々見ているのですが、何度見てもなかなか理解できません。
[参考]
PuTTYの秘密鍵が独自形式な理由
SSH 認証に公開鍵を使う
この記事では、SSHの設定方法の説明が主たる目的なので、公開鍵と秘密鍵という2つセットの鍵を利用して暗号と復号を行っているという程度の説明で止めておきます。
SSHの設定と接続のやり方
この記事で紹介する手順は、Tera Term側で生成した公開鍵をサーバー側へ送信するので1度はパスワード認証方式でログインできる状態にする必要があります。
最終的には公開鍵認証方式でのみログインできるようにします。
[環境]
サーバ | FreeBSD |
クライアント | Windows8.1 |
SSH接続ソフト | Tera Term |
システム管理者が、suまたはsudoを使用して、一般ユーザから管理者へ移ることができる環境であること。
[全体の流れ]
- パスワード認証方式でログイン可能にする。
- Tera Term側で公開鍵、秘密鍵を生成する。
- 公開鍵をサーバーに登録する。
- 公開鍵認証方式でログイン可能にする。
- パスワード認証方式でログインできないようにする。
パスワード認証方式でログイン可能にする。
サーバ側の設定
1.SSHのサービスを有効にする。
以下のファイルを編集する。
[設定ファイル:/etc/rc.conf]
sshd_enable="YES"
※FreeBSDインストール時にsshdを有効にしていると設定済みのはず。
2.SSHの設定
以下のファイルを編集する。
[設定ファイル:/etc/ssh/sshd_config]
Port 22 ← ポート番号。標準は22 必要であれば変更する。2222など Protocol 2 ← SSH2のみログインを許可 PermitRootLogin no ← rootでログイン不可 PasswordAuthentication yes ← パスワード認証方式でログイン許可 PermitEmptyPasswords no ← パスワード無しのログイン不可
ssh_configの中身を見るとほとんどの項目が「#」でコメントされています。設定が必要な項目の「#」を外してもいいのですが、再設定が必要になった時に項目を探すのが面倒なので、「#」を外さずにファイルの末尾の行に設定が必要な項目だけ記述しておいた方がいいと思います。
参考:デフォルトで「#」がなかった項目
AuthorizedKeysFile .ssh/authorized_keys Subsystem sftp /usr/libexec/sftp-server
3.sshを起動する、または再起動する。
[状態確認]
# /etc/rc.d/sshd status sshd is not running ← 停止している場合 sshd is running as pid xxx. ← 起動している場合
[起動]
# /etc/rc.d/sshd start
[再起動]
# /etc/rc.d/sshd restart
クライアント側の設定
1.Tera Termをインストールする。
[入手先]
2.初回の接続
- デスクトップにあるTera Termのアイコンをクリックする。
- 「新しい接続」の画面を表示するのでサーバのIPアドレスを入力して「OK」ボタンを押す。
- 初回接続時は「セキュリティ警告」画面を表示するのでそのまま「続行ボタン」を押す。
- 「SSH承認」画面を表示するのでログイン名とパスワードを入力する。「プレインパスワードを使う」にチェックを入れて「OK」ボタンを押す。
- ログインできたらOK。
ログインしたまま次の操作に移る。
Tera Term側で公開鍵、秘密鍵を生成する。
1.設定>SSH鍵生成 で「TTSSH: 鍵生成」画面を開く。
以下の項目を設定して「生成」ボタンを押す。
鍵の種類:RSA
ビット数:2048
2.鍵のパスフレーズが入力できるようになるので、パスフレーズを入力する。
ここで入力する値は、「SSH承認」画面のパスフレーズで入力するので忘れないようにする。このパスフレーズは秘密鍵の認証に使うものです。サーバのログイン認証に使うものではありません。
保存先は決まりがありませんが、C:\Program Files (x86)\teraterm に保存すると後で厄介なのでCドライブ直下または、Dドライブにフォルダを作成して、そこに保存することをお勧めします。
私の場合、WinSCPで秘密鍵を流用しようとして失敗しました。再度、鍵生成からやり直すことになりました。
3.「公開鍵の保存」ボタンで公開鍵を保存する。
「秘密鍵の保存」ボタンで秘密鍵を保存する。
[ファイル名]
公開鍵: id_rsa.pub
秘密鍵: id_rsa
4.「閉じる」を押して「TTSSH: 鍵生成」画面を閉じる。
公開鍵をサーバーに登録する。
この作業はサーバにssh接続した状態で行う。
注意:ディレクトリはホームディレクトリのまま移動しない事。
Tera Term側で以下の操作する。
- ファイル>SSH SCP で「TTSSH:Secure File Copy」画面を開く。
- 「…」ボタンを押してid_rsa.pub を選択する。
- 「Send」ボタンを押してid_rsa.pub をサーバに転送する。
サーバ側で以下の操作をする。
- lsコマンドでサーバ側にid_rsa.pub が保存されているか確認する。
% ls id_rsa.pub
- 公開鍵を登録する。
% mkdir .ssh % cp id_rsa.pub .ssh/authorized_keys % chmod 600 .ssh/authorized_keys
公開鍵認証方式でログイン可能にする。
サーバ側の設定
- 公開鍵認証方式でログイン許可にする。
[設定ファイル:/etc/ssh/sshd_config]
PubkeyAuthentication yes ← 公開鍵認証方式でログイン許可
- sshを再起動する。
# /etc/rc.d/sshd restart
- 一旦ログアウトする。
Tera Term側の操作
Tera Termから公開鍵認証方式でログインできるか確認する。
- デスクトップにあるTera Termのアイコンをクリックする。
- 「新しい接続」の画面を表示するのでサーバのIPアドレスを入力する。「OK」ボタンを押す。
- 「SSH承認」画面を表示するのでログイン名とパスフレーズを入力する。「RAS/DSA/ECDSA/ED25519鍵を使う」にチェックを入れる。
- 「秘密鍵」ボタンを押してid_ras を選択する。
- 「OK」ボタンを押してログインできたらOK。
公開鍵認証方式でログインできるようになった後は、サーバ側に転送したid_rsa.pub は不要なので削除しておく。
% rm id_rsa.pub
パスワード認証方式でログインできないようにする。(公開鍵認証方式でのみログインできる状態にする。)
サーバ側の設定
- パスワード認証方式でログイン不可にする。
[設定ファイル:/etc/ssh/sshd_config]
PasswordAuthentication no ← パスワード認証方式でログイン不可 yesをnoに変更する。 ChallengeResponseAuthentication no ← これを設定しないと 「キーボードインタラクティブ承認を使う」 でログインできてしまう。
- sshを再起動する。
# /etc/rc.d/sshd restart
Tera Term側の操作
Tera Termからパスワード認証方式でログインできないことを確認する。
パスワード認証方式でログインしようとすると、「認証に失敗しました。再試行してください。」と表示され、公開鍵認証方式でしかログインできなくなります。
ファイル転送ソフト:WinSCPを使用してSFTPによるファイル転送を行う方法は以下のページで紹介しています。
コメント