用意するもの
- Conoha VPS
- OS > CentOS 6.5
- rootパスワード > 任意
- 他デフォルト
- VPSにsshする .ssh/config と秘密鍵 conoha_default.key
- ターミナルか、cmder推奨
やること
- rootでユーザーを作成して、
- そのユーザーで鍵認証できたら、
- そのユーザーの鍵認証以外を禁止する。
前提
以下のような.ssh/config
Host myvps
HostName myvps.example.com
IdentityFile ~/Download/conoha_default.key
Port 22
User root
で、vpsがssh myvps
コマンドから、rootログイン出来る状態。もしくは
ssh [email protected] -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
コマンドを使用できるようになった。
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 [email protected] -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 [email protected] -p 22 -i ~/Download/conoha_default.key
# Received disconnect from *.*.*.*: 2: Too many authentication failures for root
以降は作成したユーザーから秘密鍵でログインする。
認証ポートを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に変えること。
ついでに 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"
はしがき
久しぶりにvps触ったら、わりと迷子になったので、上から下にコピペで環境整うような文書を書いた。
そのほか、
- sshコマンドの
-vvv
オプションで、デバッグログが拾えるので、詰まった時ググりやすかった - sshしたとき、WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!みたいなメッセージが出たら、
~/.ssh/known_hosts
のmyvps.example.com
の行を消して再認証させると黙る