【要約】 Ubuntu上のSSHサーバの設定と公開鍵の設定は,セキュアなリモート接続を実現する手段である.SSHサーバの設定ファイル(/etc/ssh/sshd_config)を編集し,rootログインや空パスワードの抑止,認証試行回数の制限などを行う.また,公開鍵暗号方式を採用することで,パスワードがネットワークを流れるのを防ぐ.公開鍵・秘密鍵のペアは「ssh-keygen」コマンドで生成し,公開鍵をSSHサーバ側に登録する.これにより,公開鍵による認証のみでログインが可能となる.
【サイト内の関連ページ】
sudo apt -y update sudo apt -y install openssh-client
sudo apt -y update sudo apt -y install openssh-server
以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.
/etc/ssh/sshd_config を書き換える.
root でのログインの抑止
空のパスワードの抑止
最大の認証の試行回数.多数の認証を試みることを防ぐ.
次のように設定
HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key
Subsystem sftp /usr/lib/openssh/sftp-server -l INFO
ポート番号の変更(ポート番号を変更したい場合に限る)
設定例
「AllowGroups ...」は,特定のグループ名のみログインを許すための設定. 「AllowUsers ...」は,特定のユーザ名のみログインを許すための設定
wheel hoge1 hoge2 のところは, ssh によるログインを許すグループ名,ユーザ名を列挙する.
AllowGroups wheel AllowUsers hoge1 hoge2 Match User hoge1 X11Forwarding yes AllowTcpForwarding yes Match User hoge2 X11Forwarding yes AllowTcpForwarding yes Match User hoge3 X11Forwarding yes AllowTcpForwarding yes
/etc/group の設定を忘れないこと.
上のように設定したときは, /etc/group の wheel の行に、ログインさせたいユーザ hoge1, hoge2 が含まれるように設定する.
AllowUsers <ユーザ名>@<IPアドレスの範囲>
設定例
AllowUsers you@192.168.0.0/16
以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.
先頭に「#」が付いていたら外す.
HostKey /etc/ssh/ssh_host_ed25519_key
PubkeyAuthentication yes
Ubuntu ならば、
sudo service ssh restart
Ubuntu では,SSH サーバの接続ログは /var/log/auth.log に残る
cat /var/log/auth.log
Ubuntu では,次のコマンドで SSH サーバを再起動.設定ファイルの書き換えを行った場合には, 再起動の後の動作確認を忘れないこと.
sudo service ssh restart
以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.
ALL: LOCAL XXX.YYY.: ALLOW
sshd: LOCAL XXX.YYY. AAA.BBB.CCC.: ALLOW
例えば,192.168.0.0/255.255.0.0 からの ssh アクセスを許可するときは, /etc/hosts.allow を次のように設定する.
設定例
sshd: 192.168.0.0/255.255.0.0
範囲が複数あるときは,次のように複数行を書く.
sshd: 192.168.0.0/255.255.0.0 sshd: 1.2.3.0/255.255.255.0
/etc/hosts.allow で許可した IP アドレス以外からの ssh アクセスを拒否するように設定
sshd: ALL
これは,SSH に限定せず,通信全般をポート番号により遮断するもの.
sudo ufw enable sudo ufw default DENY sudo ufw allow from any port 22 sudo ufw allow to any port 22 sudo ufw allow from any port 80 sudo ufw allow to any port 80 sudo ufw allow from any port 443 sudo ufw allow to any port 443 sudo ufw limit ssh
以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.
https://github.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning の公開情報による
sudo apt -y update sudo apt -y install fail2ban sudo fail2ban-client reload sudo fail2ban-client status sshd sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/filter.d/blacklist.conf -O /etc/fail2ban/filter.d/blacklist.conf sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/action.d/blacklist.conf -O /etc/fail2ban/action.d/blacklist.conf sudo service fail2ban restart
このファイルがないときは,ファイルを新規作成.
[DEFAULT] port = 0:65535 filter = %(__name__)s [blacklist] enabled = true logpath = /var/log/fail2ban.* filter = blacklist banaction = blacklist action = %(action_)s bantime = 31536000 ; 1 year findtime = 31536000 ; 1 year maxretry = 10
sudo touch /etc/fail2ban/ip.blacklist sudo chmod 775 /etc/fail2ban/ip.blacklist sudo service fail2ban restart sudo fail2ban-client reload sudo service sshd restart
cat /var/log/fail2ban.log cat /etc/fail2ban/ip.blacklist
以下の操作は,接続元(ユーザマシン)で,各ユーザが行う.
Windows での MobaXTerm のインストール: 別ページ »で説明している.
Windows マシン の場合は,MobaXTermをインストールし,それに内蔵の ssh-keygen, ssh を使うのが便利.
Windows のコマンドプロンプトを管理者として実行するには, 検索窓で「cmd」と入れたあと, 右クリックメニューで「管理者として実行」を選ぶのが簡単.
「ssh-keygen」を使う. ssh-keygen は,キーペア(公開鍵と秘密鍵)を生成できる機能をもったコマンドである. 公開鍵は,接続先(SSH サーバ側)の所定のファイルに追加して使う.
管理者として実行したコマンドプロンプトで次を実行
「-C ''」はコメントである.ここではコメントは空としている.
ssh-keygen -t ed25519 -m PEM -C ''
「Enter file in which to save the key ...」に対しては Enter キー.
このコマンドの実行のときに,パスフレーズを設定. 同じパスフレーズを2回入れること. パスフレーズは画面に表示されないのは正常動作である.
キーペアのファイル %HOMEPATH%/.ssh/id_ed25519(秘密鍵), %HOMEPATH%/.ssh/id_ed25519.pub(公開鍵) が,各ユーザのホームディレクトリ下に作成されるので確認
cd %HOMEPATH% cd .ssh dir /w
<Documents のフォルダ>\MobaXterm\home\.ssh に id_ed25519, id_ed25519.pub をコピーする
SFTP, 「鍵ファイル」,鍵ファイルとして先ほど生成した id_ed25519 を設定する.
設定すると,「対応していません。ファイルを変換しますか?」のように表示される. ここで,「はい」を選ぶ. ppk ファイルへの変換が自動で行われ,次のように表示される.
「mkdir $HOME/.ssh」は .ssh ディレクトリを作るためのもの. .ssh ディレクトリを作成済みのときは,「type id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "cat >>$HOME/.ssh/authorized_keys"」 のように実行
cd %HOMEPATH% cd .ssh type id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "mkdir $HOME/.ssh; cat >>$HOME/.ssh/authorized_keys" <接続先のマシンに接続するためのパスワード(キーペアのパスワードではない)>
今度は,「Enter passphrase for key ...」のように表示されるようになる.キーペアが利用されていることが確認できる.
ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> <パスワード(キーペアのパスワード)>
「ssh-keygen」を使う. ssh-keygen は,キーペア(公開鍵と秘密鍵)を生成できる機能をもったコマンドである. 公開鍵は,接続先(SSH サーバ側)の所定のファイルに追加して使う.
「-C ''」はコメントである.ここではコメントは空としている.
ssh-keygen -t ed25519 -m PEM -C ''
「Enter file in which to save the key ...」に対しては Enter キー.
このコマンドの実行のときに,パスフレーズを設定. 同じパスフレーズを2回入れること. パスフレーズは画面に表示されないのは正常動作である.
キーペアのファイル $HOME/.ssh/id_ed25519(秘密鍵), $HOME/.ssh/id_ed25519.pub(公開鍵) が,各ユーザのホームディレクトリ下に作成されるので確認
cd $HOME cd .ssh ls
「mkdir $HOME/.ssh」は .ssh ディレクトリを作るためのもの. .ssh ディレクトリを作成済みのときは,「cat id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "cat >>$HOME/.ssh/authorized_keys"」 のように実行
cd $HOME cd .ssh cat id_ed25519.pub | ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> "mkdir $HOME/.ssh; cat >>$HOME/.ssh/authorized_keys" <接続先のマシンに接続するためのパスワード(キーペアのパスワードではない)>
今度は,「Enter passphrase for key ...」のように表示されるようになる.キーペアが利用されていることが確認できる.
ssh <ユーザ名>@<接続先のマシン名またはIPアドレス> <パスワード(キーペアのパスワード)>
以下の操作は,接続先(SSH サーバ側)のマシンで,システム管理者が実施する.
SSH サーバは,公開鍵による認証のみを行い,パスワードでの認証を行わなくなる.公開鍵による設定を終えたあとで行うこと.
PasswordAuthentication no
「/usr/sbin/sshd -d」とあるのは、デバッグモードでの起動.
services sshd stop /usr/sbin/sshd -d
「-2」は ssh のバージョン指定
ssh -2 -l <ユーザ名> <接続先の IP アドレスまたはマシン名>