UbuntuにWindowsからSSH接続(公開鍵認証)の事後メモ

UbuntuWindows7からSSH接続できるようにしようとしたら、CentOSの時とコマンドが微妙に違ったりで、結構苦労した。
今回も公開鍵認証方式を採用し、クライアント側は秘密鍵を持って接続しに行く。

環境設定

SSHサーバのインストール
sudo apt-get install ssh openssh-server
SSHサーバの設定
sudo emacs /etc/ssh/sshd_config

変更内容:

  • Port を 22 から変更(※セキュリティの観点から。他と被らないように注意)
  • PermitRootLogin no (※rootで不正ログインされたらオシマイのため)
  • PasswordAuthentication no (※公開鍵認証と比較して安全性が低いため)
  • AllowUsers ユーザ1 ユーザ2 ...(※セキュリティの観点から)
接続ホストの受け入れ設定
sudo emacs /etc/hosts.allow

記述内容:

sshd : ホスト名1 ホスト名2 : allow
sshd : ALL : deny
ポートを開く
sudo ufw enable
sudo ufw allow <port>/<tcp|udp>
接続ホストの公開鍵を格納する
mkdir ~/.ssh
chmod 700 ~/.ssh
mv authorized_keys ~/.ssh
chmod 600 ~/.ssh/authorized_keys
SSHサーバの起動
sudo /etc/init.d/ssh start

各種確認方法

ポート状態確認
sudo ufw status
ネットワークインタフェース状態確認
netstat -tulpn
エラーログ確認
cat /var/log/auth.log | grep ssh | less
cat /var/log/messages | grep ssh | less

ログレベルは、 /etc/ssh/sshd_config で LOGLEVEL 値として設定。

おまけ

接続できた人とできなかった人のログを残す方法。
1. ログ用のフォルダ作成

sudo mkdir -p /var/local/log/hosts_access

2. 時刻と接続元を出力するコマンドの作成

cd /usr/local/bin
sudo emacs date.a
sudo chmod +x date.a

date.aの中身:

#!/bin/sh
LANG=c date '+%Y-%m-%d %H:%M:%S'

3. /etc/hosts.allow ファイルに spawn コマンドを埋め込む

sshd : ホスト名1 ホスト名2 : spawn echo '/usr/local/bin/date.a' from %a >> /var/local/log/hosts_access/sshd_accept.log : allow
sshd : ALL : spawn echo '/usr/local/bin/date.a' from %a >> /var/local/log/hosts_access/sshd_reject.log : deny

参考文献