Help us understand the problem. What is going on with this article?

VPSのユーザー追加とrootログイン禁止(ConoHaの場合)

More than 3 years have passed since last update.

用意するもの

やること

  1. rootでユーザーを作成して、
  2. そのユーザーで鍵認証できたら、
  3. そのユーザーの鍵認証以外を禁止する。

前提

以下のような.ssh/config

Host myvps
 HostName      myvps.example.com
 IdentityFile  ~/Download/conoha_default.key
 Port          22
 User          root

で、vpsがssh myvpsコマンドから、rootログイン出来る状態。もしくは

ssh root@myvps.example.com -p 22 -i ~/Download/conoha_default.key

でrootログインできる状態

1 ユーザーの作成

ssh myvps

adduser 59naga
passwd 59naga # 任意
gpasswd -a 59naga wheel

id 59naga
# uid=500(59naga) gid=500(59naga) groups=500(59naga),10(wheel)

以上で、wheelグループの59nagaユーザーを作成できた。

認証用のディレクトリを作成する

cd /home/59naga/
mkdir .ssh
chmod 700 .ssh
chown 59naga .ssh

ls -la
# drwx------  2 59naga root   4096 Mar  1 14:59 .ssh

/home/59naga/.sshディレクトリを700で作成できた。

wheelグループに特権を与える

visudo

# %wheel ALL=(ALL)       ALL
%wheel ALL=(ALL)       ALL

以上で、作成したユーザーでsuコマンドを使用できるようになった。

sudoを使えるようにします(wheelグループが)

2 秘密鍵・公開鍵の作成

ログアウトして、ローカルの~/.sshで作業する。

cd ~/.ssh
ssh-keygen -t rsa -b 2048

ssh-keygen後の

  • Enter file in which to save the key は myvps
  • Enter passphrase と Enter same passphrase againは(空)とした
ls -la
#-rw-------   1 59naga  staff  1766 Mar  1 09:55 myvps
#-rw-r--r--   1 59naga  staff   399 Mar  1 09:55 myvps.pub

以上でローカルに、秘密鍵~/.ssh/myvpsと、公開鍵~/.ssh/myvps.pubが作成できた。

公開鍵をサーバーへアップロードする

scp myvps.pub myvps:/home/59naga/.ssh/
# myvps.pub     100%  399     0.4KB/s   00:00

で、公開鍵をユーザーの~/.sshディレクトリにアップロードできた。

サーバーに認識させる

アップロードしただけでは公開鍵を見てくれないので、公開鍵と、その設定を修正する

ssh myvps

cd /home/59naga/.ssh/
mv myvps.pub authorized_keys
chmod 600 authorized_keys
chown 59naga authorized_keys

ls -la
# -rw------- 1 59naga root    399 Mar  1 10:00 authorized_keys

authorized_keysを600で、所有者を作成したユーザーに変更した。

sudo vi /etc/ssh/sshd_config

#RSAAuthentication yes
RSAAuthentication yes
#PubkeyAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile      .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

以上のパラメータを書き換え、/etc/ssh/sshd_configを適用するため、sshdを再起動する

sudo service sshd restart

正しく設定できていれば

ssh 59naga@myvps.example.com -p 22 -i myvps
# Identity added: myvps (myvps)
[59naga@myvps ~]$ 

で、秘密鍵を提示して、作成したユーザーとしてログインできるようになった。

configを書き換える場合は、IdentityFileの値を~/.ssh/myvps、Userの値を59nagaに変えることで、ssh myvpsできる。

3 そのユーザーの鍵認証以外を禁止する

睡眠はしっかり取ろう

以降の作業、手順を間違えるとsshに入れなくなったりするので、取り扱いに注意すること。

まず、rootに戻るためにsuでrootパスワードを入力し、rootユーザーに戻る。その後
sudo vi /etc/ssh/sshd_config

#PermitRootLogin yes
PermitRootLogin no # コメント外しただけではyesなのでnoにする

#RhostsRSAAuthentication no
RhostsRSAAuthentication no

#PasswordAuthentication yes
PasswordAuthentication no # コメント外しただけではyesなのでnoにする

#PermitEmptyPasswords no
PermitEmptyPasswords no

再起動して適用する

service sshd restart

以上で、これまで使っていたrootユーザーのログインが禁止されるようになった。

ssh root@myvps.example.com -p 22 -i ~/Download/conoha_default.key
# Received disconnect from *.*.*.*: 2: Too many authentication failures for root

以降は作成したユーザーから秘密鍵でログインする。

RSA公開鍵認証の有効化とパスワード認証の無効化

認証ポートを22から10022に変更する

sudo vi /etc/ssh/sshd_config

#Port 22
Port 10022

sudo vi /etc/sysconfig/iptables

#-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT

再起動して上記2ファイルを適用する

service sshd restart && service iptables restart
#sshd を停止中:                                             [  OK  ]
#sshd を起動中:                                             [  OK  ]
#iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
#iptables: ファイアウォールルールを消去中:                  [  OK  ]
#iptables: モジュールを取り外し中:                          [  OK  ]
#iptables: ファイアウォールルールを適用中:                  [  OK  ]

configやsshコマンドの-pも忘れず10022に変えること。

SSH 接続のポート番号を変更 〜 CentOS6

ついでに warning: setlocale を黙らせる

vim /etc/sysconfig/i18n

before

LANG=en_US.UTF-8
SYSFONT=latarcyrheb-sun16

after

#LANG=en_US.UTF-8
SYSFONT=latarcyrheb-sun16

LC_CTYPE="ja_JP.utf8"

LANG="ja_JP.utf8"
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"

sshでログインした時、localeまわりでエラーが出た場合の対処法

はしがき

久しぶりにvps触ったら、わりと迷子になったので、上から下にコピペで環境整うような文書を書いた。

そのほか、

  • sshコマンドの-vvvオプションで、デバッグログが拾えるので、詰まった時ググりやすかった
  • sshしたとき、WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!みたいなメッセージが出たら、~/.ssh/known_hostsmyvps.example.comの行を消して再認証させると黙る
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away