さてさて。
前回インストールが完了したはずのUbuntu14.04にSSHサーバを構築し、リモートで操作・設定ができる状態にまで戻してマシンを自宅に置いてきたいと思います。
WiMAX環境ではパッケージのダウンロードは遅いしポートの開放もめんどくさい上に怖いし、電気代も掛かるし・・・
まずはソフトのインストールから
毎度おなじみコマンドラインで
sudo apt-get update sudo apt-get install ssh
と入力してインストールを実行します。
関連するパッケージも一緒に導入されますのでここは素直に従っておきましょう。
各種設定を施す
設定を行う前に、設定に関するポイントを列挙しておきます。項目を絞って、手を加えるのは必要最小限に留めたいですしね。
- 「root」でのログインは禁止
- パスワード認証も許可しない。秘密鍵による認証のみ。
- パスワードなし(空白)でのログインも拒否
- 暗号強度は2048ビットにしておく
ぐらいにしておきます。ただし、パスワード認証に関しては鍵認証の設定完了が確認できてから不可へと変更します。そのほうが設定を進めやすいので。。。
で、設定内容を纏めると
$ sudo vi /etc/ssh/sshd_config 20行目 暗号強度を変更 ServerKeyBits 2048 28行目 rootでのログインを拒否 PermitRootLogin no 31行目 RSA暗号による秘密鍵認証を適用 RSAAuthentication yes 33行目 公開鍵のパスを指定(行頭の#を削除して有効化) AuthorizedKeysFile %h/.ssh/authorized_keys 45行目 空パスワードでのログインを拒否 PermitEmptyPasswords no 52行目 パスワード認証を拒否(公開鍵の設定確認できたらnoへ修正) PasswordAuthentication yes→no
といったところでしょうか。あとはSSHの再起動で設定を反映させましょう。
$ sudo initctl restart ssh
サーバ側はひとまず設定完了!として、次はクライアント側の設定へと進みます。
Win端末で鍵の作成と登録
公開鍵・秘密鍵の作成方法ですが、「サーバで作って秘密鍵をダウンロード」する方法と「端末で作って公開鍵をアップロード」する方法があります。
ここでのポイントは「ネットワークを通すことでパケットを盗聴されるおそれがある」ということ。
仮に公開鍵を盗まれたところで、公開鍵ではサーバへのログインを行うことはできないのでまだいいんです。
問題は秘密鍵を盗まれた場合。鍵自体にパスワードを付与するんですが(詳しくは後述します)、そのパスワードを破られると秘密鍵で簡単にサーバへログインされてしまいます。
故にここでは「端末でペアの鍵を作って公開鍵をサーバへアップロードする」という方法で進めます。
鍵の作成
自分はSSHクライアントとして「Tera Term」を使用していますがこれだと簡単に鍵を作成できます。
「設定」→「SSH鍵生成」と進み、暗号の種類(RSAを使用します)と暗号強度(2048ビットで進めます)を入力したら「生成」ボタンを押します。
鍵が作成できたらパスワード(これは鍵を使用するためのものです!)を登録して鍵を保存します。通常秘密鍵は「id_rsa」、公開鍵は「id_rsa.pub」という名前が適用されるようですが好きに変えて問題ないようです。
鍵ペアが作成できたら公開鍵をテキストエディタで開き、中身をまるごとコピーします。そして
vi -r /home/ログインユーザ名/.ssh/authorized_keys
と入力して、先ほどコピーした公開鍵の中身を貼り付けて「:wq」にて保存します。
これで準備はOKなのでクライアントを一度閉じましょう。
再度クライアントを立ち上げ、鍵認証方式を選択して先ほど作成した秘密鍵(id_rsa)を指定して鍵を開くためのパスワードを添えてログインしてみましょう。
無事できましたか?
ここまでできたらsshd_configを再度開いてパスワードログインの項目を不可に変更すれば、以降鍵を持たないものは一切SSHログインができなくなります。
まとめ
リモート環境でサーバに乗り込む手段であるSSH接続。
遠距離にあるサーバにもログインして作業を行うことができるツールですし、これができればサーバ自体にディスプレイ・マウス・キーボードなどを設置する必要も基本的にはなくなる(もちろんいざって時や現地で触る場合は別ですよ)のでありがたいソフトです。
しかし、通信自体は暗号化されるのですがその前のログイン認証情報を盗まれてしまっては暗号化自体が無意味になってしまいますよね。
鍵を使う側としては管理を厳重に行う必要がありますし、サーバ側としてはログのチェックを行うなどセキュリティ管理に気を配らないといけませんね。