[ConoHa]登録からSSHログインまわりの設定まで

VPSどころかLinux系にまったくふれたことないけどVPSで遊んでみた。 お仕事だとWindows系ばっかだから全く使わないんだよなぁ。

WindowsでのSSHクライアントとしては Git Bash とか RLogin とか適当に使った。

1. Conoha に登録

ConohaにVPSを設置して、SSHログイン、ポート番号変更、rootログイン禁止までを30分で! - Qiita を参考というかほぼそのまんま。

  1. 「rootパスワード」を入力 (メモしておくこと)
  2. その他の設定はいじらないでそのままで「追加」を押下 ※デフォルトのOSは CentOS 7.2(64bit) だった。

2. rootでログインしてユーザを追加

# クライアント(ローカル)からリモートログイン
$ ssh -p 22 root@(IPアドレス)
パスワード入力したら以降はリモートでの作業

# ユーザ作成
$ adduser ユーザ名

# 作成したユーザのパスワード変更
$ passwd ユーザ名
作成したユーザのパスワードを登録

# 作成したユーザの確認
$ cat /etc/passwd | grep ユーザ名

# wheelグループに追加
$ gpasswd -a ユーザ名 wheel

# 所属グループの確認
$ id ユーザ名

# 作成したユーザでログイン
$ su ユーザ名

# sudo が使えるかどうか確認
$ sudo echo "foobar"
パスワード入力して"foobar"が表示されればOK

# PAM(Pluggable Authentication Modules)の設定を変更して
# wheelグループ所属のユーザのみsuコマンドが実行できるようにする
$ sudo vi /etc/pam.d/su

以下のように /etc/pam.d/su を変更(コメントアウトを外すだけ)

- #auth  required  pam_wheel.so user_uid
+  auth  required  pam_wheel.so user_uid

次に sudo vi /etc/login.defs で以下の行を末尾に追加

SU_WHEEL_ONLY yes

sudoers の設定変更

wheelグループのユーザのみsudoが実行できるようにするために visudo で sudoers の設定を以下のように変更(コメントアウトを外すだけ) する必要があるらしいけどConoHaでは最初から設定されていた。

- # %wheel  ALL=(ALL)      ALL
+ %wheel  ALL=(ALL)      ALL

3. SSHログインを許可

# 設定ファイルをviで編集
$ sudo vi /etc/ssh/sshd_config

以下の設定を変更する。(ConoHaではAuthorizedKeysFile は既に下記設定になっていて、 上の2つは先頭の'#'を取り除くだけだった)

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys
$ sudo service sshd restart

4. SSH鍵を生成

作成したユーザ(rootでやらないこと)でSSH鍵を生成する。

$ cd ~
$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh

# 鍵の生成
$ ssh-keygen -t ecdsa -b 521
で秘密鍵と公開鍵(.pub)が生成される。
秘密鍵が漏洩する可能性を考えるのならパスフレーズを指定。

# AuthorizedKeysFileの設定値に指定されているファイルパスに公開鍵を設置
$ mv 公開鍵.pub authorized_keys
$ chmod 600 authorized_keys

# 秘密鍵をクライアントにコピー
$ cat 秘密鍵
表示されたものをコピってローカルの ~/.ssh/秘密鍵のファイル名 に保存

ローカルの ssh_config (git bash の場合は たぶん C:\Program Files/Git/etc/ssh/ssh_config) に設定を追加

Host 任意のホスト名
  HostName IPアドレス
  User 作成したユーザID
  Port 22
  IdentityFile ~/.ssh/秘密鍵のファイル名

5. クライアントからSSH鍵でログインできるかチェック

# `exit` などでリモートからログアウト後に
$ ssh 任意のホスト名
鍵の生成時にパスフレーズを指定していた場合は入力が必要

パスフレーズを何度も入力するのがメンドウな場合は ssh-agent を使う

# ローカルのクライアントで
$ ssh-agent bash
$ ssh-add ~/.ssh/秘密鍵のファイル名
(パスフレーズの入力)

# ssh-add後はパスフレーズの入力をせずにSSHリモートログインできる
$ ssh 任意のホスト名

6. rootからのログインを禁止

$ sudo vi /etc/.ssh/sshd_config
PermitRootLogin no に設定を変更して保存

$ sudo service sshd restart

以降、root でログインしようとすると権限エラーとなる。

7. パスワードによるログインを禁止

$ sudo vi /etc/.ssh/sshd_config
PasswordAuthentication no に設定を変更して保存

$ sudo service sshd restart

設定を戻したいときは PasswordAuthentication yes に変更すればOK

8. SSHのポート番号を変更 (iptables)

iptablesサービスがインストールされていなければインストールする必要がある。 ※CentOS7ではiptablesの代わりにfirewalld使ったほうがよさそう?iptablesを使わない場合は以下の設定は不要

# iptablesサービスがない場合はインストール
$ sudo yum install iptables-services

で、/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 変更後のポート番号 -j ACCEPT

ポート番号は 1024より大きい値が良いらしい。 あと 10022 みたいな番号は狙われるのであんまり関係がないPORTにしたほうがいい。 編集後にサービスを再起動する sudo service iptables restart

次に /etc/ssh/sshd_config も編集する。

- #Port 22
+ Port 変更後のポート番号

変更後にsshdサービスを再起動する sudu services sshd restart これで 22番ポートではログインできなくなる。

CentOS7ではサーバ再起動(sudu reboot)時にiptablesの設定が有効となるように systemctl で自動起動の設定を変更する必要がある。これをやらずにサーバ再起動すると SSHログインできなくなったりするので注意(Conohaのコントロールパネルからログインすればいいけど)

$ sudo systemctl stop firewalld.service
$ sudo systemctl mask firewalld.service
$ sudo systemctl enable iptables.service

9. SSHのポート番号を変更 (firewalld)

CentOS7のfirewalldでsshのポート番号を変更する方法 - Qiita を読んで設定すればOK。以下は蛇足のメモ。

CentOS7からはfirewalldがデフォルトで利用されるらしいので、 iptablesではなくfirewalldを使うことにした。

SELinuxが有効な場合はこれの設定の変更も必要だが conohaではSELinuxはデフォルトではOFF(設定は/etc/sysconfig/selinux)なのでOFFのままにしておく。

firewalldはCentOS7.2では最初からインストールされて有効になっている。
systemctl status firewalld で状態を確認できる。

# 状態確認
$ systemctl status firewalld

# デフォルト設定をコピー
$ sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh.xml

# コピーしたファイルを編集
$ sudo vi /etc/firewalld/services/ssh.xml
でポート番号を書き換えて保存

# サービス再起動
$ sudo systemctl restart firewalld

で、iptablesの自動起動をしていたら戻す。してないならそのままでいい。

$ sudo systemctl unmask firewalld.service
$ sudo systemctl start firewalld.service
$ sudo systemctl disable iptables.service
$ sudo systemctl stop iptables.service

10. その他 関連コマンドメモ

# サービスの確認
$ rpm -ql firewalld | grep サービス名

# firewalldサービスの自動起動設定が有効化どうか確認
$ systemctl is-enabled firewalld

# firewallの設定内容の確認
$ firewall-cmd --list-all

# 待ち受けポートの確認
$ ss -t -l -n
Share