背景
現在、パスワード認証となった状態のubuntuサーバを、公開鍵認証方式に切り替える事で、セキュリティレベルを高める。
- ここではtest1というアカウントを追加する手順について説明する。適宜、test1を読み替えてください。
- Ubuntu 18.04.3 LTS (GNU/Linux 5.0.0-1032-azure x86_64)
- クライアントPCはMacBook Air。
- sshはport22番
1. アカウントの追加
(参考:https://qiita.com/white_aspara25/items/c1b9d02310b4731bfbaa)
/home以下にディレクトリを作ってくれる。このコマンドを入力するだけで一般ユーザの追加に成功する。
adduser test1
root権限を付与する。
gpasswd -a test1 sudo
2. ssh鍵を作る
クライアントPCで鍵を作成する。test1、test1.pubという二つのファイルが作られる。前者が秘密鍵で、後者が公開鍵。ssh-keygenコマンドの詳細な仕様については、一番最後にリンクを貼ったので他のドキュメントに委ねたい。
ssh-keygen -t rsa -b 2048 -f test1
- デフォルトのままで鍵を作ると、複数の鍵を作りたい時に不便なので「-fオプション」を指定して、それぞれのアカウントに対応して、鍵の名称を指定して作り分けた方が良いと思う。
- 作成した鍵は、~/.ssh/配下に格納するのが習わし。
3. ubuntuサーバに鍵を送る
公開鍵はサーバ上に見える形で仕込む。秘密鍵は認証する際に指定するものとなり、置き場所等は隠し持つ形となる。
ubutunサーバに対して、以下のコマンドで公開鍵を送る。
scp ./test1.pub test1@<ubuntuサーバのIPアドレス>:~/.ssh/authorized_keys
- authorized_keysは公開鍵を記述するためのファイル。下記で述べる設定ファイルで指定されるので自由に変更できるかとは思うが、誤解や混乱を生まない為にも、変更せずこのまま使う形が良いと思う。
- 複数の公開鍵を設定する場合は、ここに追記していく形となる。
4. 権限を整える
ubuntuサーバにtest1ユーザでログインして、以下のコマンドを実行する。
chmod go-w ~
chmod go-w ~/.ssh
chmod go-w ~/.ssh/authorized_keys
- 上記の3つのディレクトリやファイルは、sshdが求める、アクセス権限の条件をクリアするように設定する必要がある。条件をクリアせず権限が正しく無いと、sshdが公開鍵認証方式の対象として有効に扱わない。つまりここで指定した公開鍵は無視されて、最悪二度とログインできなくなる。
5.設定の変更
以下のように設定ファイルを書き換える。
- PasswordAuthenticationをnoにする事で、パスワード認証が行われなくなる。
- PubkeyAuthenticationをyesにする事で、公開鍵認証方式で接続が可能となる。
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFileはコメントを外し、以下のようにする。
※ここの設定に気がつかず、少しハマった
AuthorizedKeysFile .ssh/authorized_keys
6.sshdのリスタート
注意点!
ここで、とても大切な事がある。動作確認を終えるまで、サーバ側にログインしたターミナルからログアウトしないで欲しい。というのは、設定に失敗していて(例えばフォルダのアクセス権限が強すぎていて、sshdに公開鍵を無視された場合)、公開鍵認証方式でログインできない状態となってしまったのにもかかわらず、ログアウトしてしまうと、二度とログインできないサーバになってしまう!
これからお知らせするコマンドを入力したのにもかかわらず、何をやってもこんな風にエラーを出力する場合は、
lhormace@xxx.xxx.xxx.xxx: Permission denied (publickey).
迷わず「5.設定の変更」の設定を、変更する前に戻した上で、sshdを再起動して欲しい。特に本番運用中のサーバでこれをやってしまうと、取り返しのつかない大事故になるから要注意。(できれば設定ファイルは作業の前にバックアップを取っておく方が良い)
気を取り直して、
上記の「注意点」をよく読んだら、設定の変更内容は以下のリスタートコマンドで反映する。
sudo /etc/init.d/ssh restart
7.動作確認
以下で無事ログインに成功すれば、作業完了。
ssh -i ~/.ssh/test1 test1@<ubuntuサーバのIPアドレス>
まとめ
ネット上を検索しながら、新規アカウントの追加と公開鍵認証方式への変更を進めたが、思わぬところでハマったりした(書いてない)ので、同じ落とし穴に二度とハマらない為に作成しました。
参考にしリンク
参考:https://qiita.com/mukoya/items/f20def019e25dc162ca8
参考:https://qiita.com/white_aspara25/items/c1b9d02310b4731bfbaa
参考:https://webkaru.net/linux/ssh-keygen-command/
参考:https://blog.neoflow.jp/oss/openssh/2816/
参考:https://orebibou.com/2014/10/ssh%E3%82%B5%E3%83%BC%E3%83%90sshd%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%AE%E6%96%B9%E6%B3%95%EF%BC%88os%E5%88%A5%EF%BC%89/
参考:https://qiita.com/kazokmr/items/754169cfa996b24fcbf5