環境
サーバー側の OS : Ubuntu 20.04 LTS
クライアント側の OS : Windows11
使用ソフト : OpenSSH
変更の動機
パスワード方式よりも安全そうだったので。
手順
0,サーバー機へアクセス可能かを確認する
頑張ってください。
(パスワード認証のSSHやリモートデスクトップなど)
1,鍵を生成する
OpenSSHが入っていることを確認して、クライアント側のPCでssh-keygen
を実行する。
ssh-keygen -t ed25519
とすることでデフォルトのものよりも破られにくい鍵を生成することができる。(推奨)
実行してからパスフレーズの入力などを求められるが、必要でなければ何も入力せずにEnterを押して進む。
2,「公開鍵」をコピーする
きちんと鍵が生成されていることを確認(※1)して拡張子が.pubになっているファイルの中身(※2)をコピーする。
※1 : 保存先を指定せずに鍵を生成すると Windows の場合はC:\Users\[ユーザー名]\.ssh
配下に保存される。
※2 : .pub が付かない方のファイルは秘密鍵と呼ばれるもので、絶対に流出させてはいけない。
3,「公開鍵」をサーバーに置く
公開鍵をコピーしたらサーバーに接続して
/home/[ユーザー名]/.ssh/authorized_keys
にペーストする。
.ssh(ディレクトリ) や authorized_keys(ファイル) が存在しない場合は mkdir
や touch
を使って作成する。
この時、.ssh と authorized_keys の所有者、権限を変更しておく。
アクセス権限は .ssh は 700 , authorized_keys は 600 にする。
(700 は所有者のみ読み書きと実行が可能な状態 / 600 は所有者のみ読み書きが可能な状態)
↓権限の変更
sudo chmod 700 /home/[ユーザー名]/.ssh
sudo chmod 600 /home/ユーザー名]/.ssh/authorized_keys
↓所有者の変更
sudo chown [ユーザー名] .ssh
sudo chown [ユーザー名] authorized_keys
.ssh ディレクトリの権限と所有者は以下のようになれば良い
authorized_keys の権限と所有者は上の画像で
drwx------
となっている部分が
-rw-------
であれば良い。
4,sshのデーモンの設定ファイルを書き換える
/etc/ssh
配下に存在するsshd_config
の内容を書き換える。
同じディレクトリにssh_config
というファイルも存在するがそちらではない。
PubkeyAuthentication
を yes に変更
PasswordAuthentication
を no に変更
PermitEmptyPasswords
を no にする
AuthorizedKeysFile
のコメントアウトを外す (先頭の#を消す)
書き換えたら保存する。
5,sshdの再起動
sudo systemctl restart sshd
で sshd を再起動する。
6,接続テスト
クライアント(今回はwindows11)でssh [ユーザー名]@[サーバーのIPアドレス]
を実行し、接続できれば成功。
(ポートをデフォルトの22から変更している場合はユーザー名の前に-p [ポート番号]
を入れる)
出来なければ上記の手順をもう一度見直す。
終わりに
鍵認証方式を用いることでセキュリティを強固にでき、さらに接続時にパスワードを入力する手間を省くことができる。よほどの事情がない限り鍵認証を用いた方が良いといえる。
追記
Ubuntu Server 22.04 でも設定する機会があったのでメモ。
.ssh ディレクトリと authorized_keys ファイルが元から存在していた。
加えて権限も最初からディレクトリが700、ファイルが600に、所有者も設定されていたのでちょっとだけ楽だった。
終わり