ConohaVPSを契約しDebian12を使用し始めたが、初期状態ではrootしかユーザーがいないため、ユーザーを追加する。
ついでに外部からSSHで接続できるように、設定を行う。
ユーザーはcoushとしているので、自身の環境に合わせて適時置換して欲しい。
ユーザーの作成
※以下コマンドはrootでログインした状態で実行する。
# ユーザーを追加する
useradd coush -m -U
# パスワードを設定する
passwd coush
# sudo を許可
usermod -aG sudo coush
公開鍵の作成
外部からSSHでログインできるようにしたいが、パスワードでログインできるようになっているとセキュリティ的によろしくない。そこで暗号鍵でのみログインできるように設定を行う。
まずはWindowsで鍵の作成を行う。なおこれは自分自身で1つ作って使いまわすとよい。鍵自体にはPC名・ID・メールアドレス・IPアドレスなどの情報は一切含まれないため、PCを何台も持っている場合は1つ作って全てのPCにコピーするといい。
WindowsのPowershell、Terminalから以下のコマンドを実行する。
ssh-keygen
実行すると、ユーザーフォルダ"C:\Users\coush"の下に".ssh"というフォルダができ、中に id_rsa と id_rsa.pub にできる。
いずれも中身はテキストで、公開鍵である id_rsa.pub は見られても大丈夫だし、あちこちにコピーしていい。ただし秘密鍵であるid_rsaは決して盗まれてはいけない。
Linuxに公開鍵を登録
さてLinuxに戻り、以下のコマンドを実行し、公開鍵を登録して秘密鍵でSSHログインができるようにする。rootユーザーのまま行う。
公開鍵をファイルで転送するのは面倒なので、ターミナルからechoを使って中身のテキストを直接ファイルに書き込む。
mkdir /home/coush
mkdir /home/coush/.ssh
# 公開鍵を登録する
echo "id_rsa.pubの中身のテキスト" > /home/coush/.ssh/authorized_keys
# パーミッションをcoushに変更
chown coush: /home/coush -R
SSHの設定変更
あとは、SSHの設定を変更する。sshが入っていなければ先に入れておく。
apt install sshd -y
nano /etc/ssh/sshd_config.d/default.conf
内容を以下のように書き換える。
# 鍵認証でのログインを行う
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
# rootのログインを無効にする
PermitRootLogin no
# パスワード認証を無効にする
PasswordAuthentication no
設定を反映するには、sshを再起動する。
service sshd restart
外部からSSHでログインできることを確認したら、ユーザーの追加はこれで完了。
ssh coush@xxx.xxx.xxx.xxx
パスワードを入れなくて済むのはめちゃめちゃ楽である。
一連の処理を行うスクリプト
以下の内容をadduser.shなど、適当な名前を付けて保存する。
#!/bin/bash
# ユーザーの作成
useradd $1 -m -U
# パスワード登録
echo "ユーザー $1 のパスワードを登録してください"
passwd $1
# sudo を許可
usermod -aG sudo $1
# ホームフォルダの作成
mkdir /home/$1
mkdir /home/$1/.ssh
# SSH認証鍵の登録
echo "id_rsa.pubの中のテキスト" > /home/$1/.ssh/authorized_keys
# パーミッションの変更
chmod 700 /home/$1/.ssh
chmod 600 /home/$1/.ssh/authorized_keys
chown $1: /home/$1 -R
# SSH認証方式変更 公開鍵認証 有効・rootログイン禁止・パスワードログイン禁止
echo "
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PermitRootLogin no
PasswordAuthentication no
" > /etc/ssh/sshd_config.d/default.conf
#処理終了
echo "ユーザー $1 の登録が完了しました"
rootで以下のようにして実行する。
bash adduser.sh coush