Linux上に新規ユーザーを作成し、そのユーザーで SSH 接続する設定を行った際の備忘録としてまとめます。
環境は「Ubuntu 24.04.2」です。
SSH接続するための手順
おそらく一般にはここの手順で終わると思います
- OS上にて新規ユーザー「new-user」を作成
- 公開鍵ペアを作成
- user01のホームディレクトリ
/home/new-user/.ssh/authorized_keys
に公開鍵を登録-
ssh-copy-id
などを使うと便利ですが,Windowsでは標準でつかえません。 - git for windows をインストールし,Git Bashから行うことになると思います。(もちろん手動でも構いません。)
-
- SSH接続ができるかを確認
トラブルシュート
鍵ペアがそもそもあっているかどうかも確認しておきましょう。
鍵が壊れている可能性もありますが,ここでは正常な前提で進めます。
解決にはサーバー側で SSHのログを見てしまうのがてっとり早いです。以下から接続した際のログも同時に確認してみてください。
sudo journalctl -u ssh -e
または
sudo tail -f /var/log/auth.log
/etc/ssh/sshd_config
を確認する
現状のsshd設定がどうなっているかを確認します。
sudo vi /etc/ssh/sshd_config
以下2つの設定を確認。
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
デフォルト値はともに以下の通りとなっているため,上記においてわざわざコメントアウトを外す必要はありませんが,念のため明示的に設定を書いてもいいと思います。
項目 | デフォルト値 |
---|---|
PubkeyAuthentication |
yes |
AuthorizedKeysFile |
.ssh/authorized_keys |
また,以下のような制限設定がされている場合,新規ユーザーが弾かれる場合があるため,ここも設定があるかをチェックします。
AllowUsers existing-user01 existing-user02
このようなホワイトリスト・ブラックリスト設定としては以下4つがあります。上から処理される順番にしていますので,参考にしてください。
- DenyUsers
- AllowUsers
- DenyGroups
- AllowGroups
その他の変更については以下を参照してください。
sshd_config(5): OpenSSH SSH daemon config file - Linux man page
変更を行った場合,以下で設定を反映させます。
sudo systemctl restart ssh
.ssh
ディレクトリとその中のファイルのパーミッションの確認
-
.ssh
→ 700 -
.ssh/authorized_keys
→ 600
こちらはともに接続した際のエラーは以下のようになります。
$ ssh inst-dev
new-user@xxx.xxx.xxx.xxx: Permission denied (publickey).
エラー文でみるとわかりやすいですね。
Apr 13 03:43:06 inst-dev sshd[23050]: Authentication refused: bad ownership or modes for file /home/new-user/.ssh/authorized_keys
ホームディレクトリのパーミッションと所有者を確認
ディレクトリが接続したいユーザーのものでないと接続できません。
sudo ls -al /home/new-user
パーミッションは700
か,少なくとも755
になっていることを確認します。パーミッションが緩すぎると鍵認証で蹴られることがあるそうで,私はここが770
になっていたことで接続できなくなっていました。
エラーは上記と同様です。
$ ssh inst-dev
new-user@xxx.xxx.xxx.xxx: Permission denied (publickey).
このとき,ログは以下の通りになります。
Apr 13 02:55:01 inst-dev sshd[21868]: Authentication refused: bad ownership or modes for directory /home/new-user