1
0

More than 1 year has passed since last update.

sshのセキュリティ設定

Last updated at Posted at 2022-01-03

幾度となく出ているネタの清書。

発端

サーバは立てた後にコンソールで作業することは珍しく、特に仮想サーバだとそもそもコンソールがありません(Web上にあるけど)。
大体ネットワーク越しに作業します。
その際、よく使うのはsshですが、LAN内ならいざしれず、外部に公開するサーバまでそのままの状態で使っているのはやはり不安。

ということで、ここでは以下3つのことをしていきます。

  1. ROOTログインを不可にする。
  2. SSHのポートを22番以外にする。
  3. 証明書によりログインさせる。

なお、PC・サーバ共にUbuntu 20.04を使用しています。

作業

1と2はsshd_configの設定を変更するので、予め開いておきましょう。

$ sudo vi /etc/ssh/sshd_config

1. ROOTログインを不可にする。

PermitRootLoginの項目を探してコメントアウトを解除、値をnoにします。

PermitRootLogin no

2. SSHのポートを22番以外にする。

使っていないポート番号にします。
ここでは5022番ポートを使います。

#Port 22
Port 5022

なおこれをした後はsshで接続する際にポートの指定をしなければいけません。
ポートの指定は-pで行います。

$ ssh -p 5022 user@yourserver

3. 証明書によりログインさせる。

接続元のPCで公開鍵と秘密鍵を作り、サーバ上に公開鍵を登録、PC上には秘密鍵を置いておきます。
接続時は自らの持つ秘密鍵で電子署名を作成、サーバでは送られた電子署名を検証し、正当であると判断されると接続を許可されます。
Githubではこの方法でリポジトリをクローンするPCを認証していますよね。

鍵の作成

まずは手元のPCで鍵のペアを作ります。

$ ssh-keygen -t rsa

パスフレーズなどを求められますが、特に設定しないならそのままEnterで構いません。
作り終わると.ssh/のディレクトリ以下にid_rsaid_rsa.pubの2つができていると思います。
id_rsaが秘密鍵で大切に保管するもの、id_rsa.pubが公開鍵でサーバに登録するものです。

なお鍵を任意の名前にしたい場合は以下のコマンド。ここでは説明簡略化のためid_rsaで説明します。

$ ssh-keygen -t rsa -f keyname

鍵の転送

id_rsa.pubを転送し、登録していきます。

$ ssh-copy-id -i .ssh/id_rsa.pub user@yourserver -p 5022
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: ".ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user@yourserver's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh -p '5022' 'user@yourserver'"
and check to make sure that only the key(s) you wanted were added.

※sshのポートをすでに変えている場合、-pのオプションを忘れると鍵転送ができません。鍵自体をsshで送ります。

接続確認

鍵による認証をしてみます。

$ ssh -p 5022 -i .ssh/id_rsa user@yourserver

パスワードを入力する必要もなく認証できましたでしょうか?

パスワード認証の無効化

ここまでくればすでにパスワード認証を残しておく必要もないので、サーバ側でパスワード認証を無効化しましょう。
sshd_configでPasswordAuthenticationを見つけ、値をnoにします。

PasswordAuthentication no

sshd再起動

サーバ側のsshdを再起動します。

sudo systemctl restart sshd

接続確認

新しいターミナルを立ち上げて接続確認をします。

$ ssh -p 5022 user@yourserver
user@yourserver: Permission denied (publickey).

パスワード認証でssh接続しようとしたら怒られました。

$ ssh -p 5022 -i .ssh/id_rsa user@yourserver

鍵認証であれば問題なく接続できます。

備考

最近は鍵作成にED25519という方式を使うのが広まっているのだそう。
将来的にrsaで鍵を作るのは非推奨になるのだとか。

参考にリンクを貼っておきます。
その場合は以下のようにRSAの代わりにED25519を指定します。

$ ssh-keygen -t ed25519

参考

ssh公開鍵認証設定まとめ
SSH認証に最強の「Ed25519鍵」を使おう
Ssh-copy-id for copying SSH keys to servers
ssh-rsa,非推奨のお知らせ

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0