私の自宅サーバーの運用方針としては
- サーバー機を直接操作はしない(緊急時除く)
- windowsノートPCからSSH(バージョン2)通信のみですべてまかなう
- 自宅でも外でも場所はどこからでもアクセス可能
- アクセスユーザーを自分だけ、秘密鍵ログインでガチガチに
この方針にあわせたSSHの設定とクライアント側の初回接続設定を記録した備忘録です。
この記事ではテスト環境用として自宅ルーター内でローカルIPで設定した内容となっています。
前提条件として
DebianとTeraTerm、WinSCPのインストール方法はコチラをご覧ください
ちょっと長いですが、一気に設定をして安全な操作環境を作りましょう。
このページの目次
DebianサーバーにSSHをインストールする
2014年にOpenSSLのheartbeat問題という脆弱性があったばかりなので、SSHは最新バージョンをインストールしましょう。
サーバー機で操作します。
suコマンドで管理者権限になります。
su aptitude update aptitude upgrade
まずはアップデートをかけてから
aptitude install ssh
SSHをインストールします。
文字化け状態ですが、YesかNoか聞いてきたら「y」で進みましょう。
SSHライアントソフトではちゃんと日本語が表示されるので、サーバー側の文字化け対策は実施しません。
Tera Termで公開鍵と秘密鍵を作る
windowsクライアントPCよりTera Termを起動します。
ホストにサーバーのIPアドレスを入れて「OK」
Debianインストール時に作ったユーザー名とパスワードで「OK」
※rootでログインはできるだけ避けましょう
公開鍵の作成と保存
「設定」メニューの中の「SSH鍵生成」を選択
鍵の種類「RSA」、ビット数「2048」になってるのを確認して、「生成」
鍵のパスフレーズを上下に入力して「公開鍵の保存」をクリック
パスフレーズは今後も使います、メモを忘れずに。
任意の場所に「保存」します。
ファイル名を変更してもいいですが、今回はid_rsa.pubのまま保存します。
秘密鍵の作成と保存
続いて「秘密鍵の保存」をクリック
任意の場所に「保存」します。
ファイル名を変更してもいいですが、今回はid_rsaのまま保存します。
公開鍵ファイルをDebianサーバーに転送する
クライアントPCに保存した公開鍵ファイルをTeraTermを使いサーバーに転送します。
鍵生成の画面を「×」で閉じます。
保存した公開鍵「id_rsa.pub」ファイルを、TeraTermの画面上にドラッグ&ドロップします。
「SCP」をクリック
何もメッセージが出ないと転送成功です。
上図では転送成功したかlsコマンドでファイルが在ることを確認しています。
公開鍵ファイルを既定のファイル名と場所に配置
このあと設定するsshd_configファイルのデフォルト設定に合わせておきます。
mkdir .ssh mv id_rsa.pub .ssh/authorized_keys
ユーザーフォルダの中に.sshフォルダを作り、authorized_keyファイルという名前で保存します。
sshd_configファイルの編集
debianの場合、/etc/ssh/sshd_configを編集します。
suコマンドでroot権限になってから、念のためバックアップを取っておきます。
su cp /etc/ssh/sshd_config /etc/ssh/ssh_config.default
sshd_configファイルを編集します。
nano /etc/ssh/sshd_config
かなり長い記述のファイルですが、5箇所変更します。
今回は上から順番に5箇所まとめて変更しますが、初めての方は一箇所ずつ変更して接続確認しながら進めることを推奨します。
ポート番号の変更
デフォルトのポート22のままだと不正侵入のリスクが高いので変更します。
推奨は、悪意のあるポートスキャンがされにくい1024以上の任意のポートが良いみたいです。
今回は、ポート番号55555としました。
sshd_configファイルの5行目を以下のように変更します。
Port 22
Port 55555
rootでのログイン禁止
rootログインを不可能にするのは、不正侵入対策の効果が高いです。
27行目を以下のように変更します。
PermitRootLogin yes
PermitRootLogin no
公開鍵のファイルの場所を指定
さきほど保存した公開鍵のファイルの場所の指定を有効にします。
32行目を以下のように変更します。
#AuthorizedKeysFile %h/.ssh/authorized_keys
AuthorizedKeysFile %h/.ssh/authorized_keys
プレインテキストでのログイン禁止
ログイン方法を秘密鍵ログイン限定にするため、プレインテキストでのログインを禁止にします。
51行目を以下のように変更します。
#PasswordAuthentication yes
PasswordAuthentication no
ログインできるユーザーを限定する
ログイン可能なユーザーを指定して限定しちゃいます。
これは追記のため、最終行に追加します。
# and ChallengeResponseAuthentication to 'no'. UsePAM yes
# and ChallengeResponseAuthentication to 'no'. UsePAM yes AllowUsers 【ユーザー名】
編集が終わったら、「Ctrl+x」→「y」→Enter で保存します。
サーバーを再起動します。
reboot
SSHだけをリスタートしたい場合はコチラ
/etc/init.d/ssh restart
動作確認
再びTeraTermを起動します。
設定したポート55555を入力して、「OK」
- ユーザー名と秘密鍵のパスフレーズを入れる (ユーザーのパスワードではありません)
- ラジオボタンで「RSA/DSA/ECDSA/ED25519鍵を使う」を選択
- 「秘密鍵」をクリックして、保存してある秘密鍵ファイルid_rsaを選択
- 「OK」をクリック
ログインできれば成功です。
- rootでログインできないこと
- ポート22でログインできないこと
- プレインテキストでログインできないこと
- 別ユーザーでログインできないこと
などもテストします。
最後にひとこと
以上で設定完了です。
これで安心して外出先からSSHでサーバー操作ができますね。
今回はテスト環境でしたが、実際の運用にはサーバーが外部へ公開されている必要があります。
秘密鍵の作成方法や、ファイルの移動方法、ssh_configファイルの設定方法など、いろいろなやり方があるとは思いますが、あくまで私がいつも設定している方法の紹介でした。
4年も前の記事に指摘するのも野暮ですが他にも見かける人がいると思うので…。
>>SSHは、heartbeat問題という脆弱性が2014年にあったばかりなので
OpenSSLのHeartbleed問題では?
ご指摘ありがとうございます。
内容を修正させていただきました。