ConohaにVPSを設置して、SSHログイン、ポート番号変更、rootログイン禁止までを30分で！

出来るだけシンプルにまとめてみました。root用のSSH Key不要です。

## 最初に決めておくこと

|項目|例|説明|
|---|---|---|
|rootパスワード|好きなものを|rootユーザー用のログインパスワード|
|作業用ユーザー名|newuser|rootで常にログインするのは危険なので作業用ユーザーを作成します|
|作業用ユーザーパスワード|好きなものを|作業用ユーザーのログインパスワード|
|SSH鍵を保存するファイル名|conoha|`ssh-keygen`コマンドに渡すファイル名です|
|SSH鍵のパスフレーズ|好きなものを|SSH鍵を使うためのパスワードです|
|SSHサービスを動かすポート番号|10022|デフォルトの22で動かし続けるのは危険なので適当なポート番号に変更します。<br>WELL NONEやREGISTEREDポートを避けた<b>49152～65535</b>辺りがおすすめらしいです。|

この6項目を先に決めてどこかにメモってからはじめるとスムーズに作業を進めることができます。(以下、メモ用のリスト)

- rootパスワード
- 作業用ユーザー名
- 作業用ユーザーパスワード	
- SSH鍵を保存するファイル名	
- SSH鍵のパスフレーズ	
- SSHサービスを動かすポート番号	

## サーバー追加
デフォルトの900円プラン

- OSはCentOS 7.1(x64)
- SSH Key は「使用しない」

![conoha-01.png](https://qiita-image-store.s3.amazonaws.com/0/3885/3c139ea0-501e-17b1-6819-7a66af60dd68.png "conoha-01.png")

## IPアドレスを確認

IPアドレスが分からないとログイン出来ないので先に調べておきます。

![conoha-02.png](https://qiita-image-store.s3.amazonaws.com/0/3885/65652c93-5a03-eda6-a1c4-d5bfdc270fd8.png "conoha-02.png")

## パスワード認証でrootにログイン

さきほど確認したIPアドレスでログインします。`xxx.yyy.zzz.aaa`だったら`root@xxx.yyy.zzz.aaa`です。

`/etc/ssh/sshd_config`の初期設定が`PermitEmptyPasswords yes`になっているのでパスワード認証でログインできます。

2017-01-29 追記

> @s_of_p さんから指摘がありました。Ubuntu 16.04 64bitでは`PermitEmptyPasswords no`かつ `PasswordAuthentication no`となっているそうです。
> この辺りは選択したOSの種類などによって初期設定に微妙に違いがあると思います。(CentOS 7.1でもすでにnoになっているかも、その場合はブラウザ経由など別の方法でSSH鍵を置きましょう)

```
$ ssh root@xxx.yyy.zzz.aaa -p 22
root@xxx.yyy.zzz.aaa's password: # パスワード入力

# ログイン成功！
[root@1xxx.yyy.zzz.aaa ~]# 
```

## ユーザー作成

`newuser`という名前で作るものとします。

```
# ユーザー作成
$ adduser newuser

# パスワード設定
$ passwd newuser

# wheelグループに追加
$ gpasswd -a newuser wheel

# 作成したnewuserでログインできるか確認
$ su newuser
```

## 作成したユーザーからsudoやsuが出来ることを確認

初期設定ですでにwheelグループに特権が付いているはずです。

```
$ sudo echo "aaa"
[sudo] password for newuser: 
aaa

$ su      # rootになる
パスワード: # rootのパスワードを入力

$ su newuser # newuserに戻る
```

## SSHログインを許可

```
$ sudo vi /etc/ssh/sshd_config 
```

以下の3つの設定を変更してください(設定箇所は離れているかも)。viの使い方は[こちら](http://net-newbie.com/linux/commands/vi.html)

```/etc/ssh/sshd_config 
RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys
```

```
$ sudo service sshd restart
```

## SSH鍵を作成

### ホスト側で鍵を作成

```host
# ~/.ssh を作成
$ cd ~/
$ mkdir .ssh
$ chmod 700 .ssh

# 鍵を作成
$ cd ~/.ssh
$ ssh-keygen -t rsa -b 2048
Enter file in which to save the key: conoha # ファイル名はconoha(好きなもので)
Enter passphrase:                           # パスフレーズを設定
Enter same passphrase again:                # パスフレーズをもう一度

# AuthorizedKeysFileで設定したファイル名に名前変更
$ mv conoha.pub authorized_keys
$ chmod 600 authorized_keys
```

### ローカルPCに秘密鍵をコピー


```host
$ cat conoha
```

```pc
$ cd ~/.ssh
$ vi conoha //先ほどcat conohaでコピーした内容をペーストして保存してください
$ chmod 600 conoha
```

```~/.ssh/ssh_config
#ConoHa
Host conoha
  HostName xxx.yyy.zzz.aaa
  User newuser
  Port 22
  IdentityFile ~/.ssh/conoha
```

## 作ったユーザーでSSHリモートログインできるかテスト

ローカルPCからコマンド入力

```~/.ssh/ssh_config
$ ssh conoha
```

## もっと安全に

### rootからのログインを禁止

```/etc/ssh/sshd_config 
PermitRootLogin no 
```

```
$ sudo service sshd restart
```


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

```/etc/ssh/sshd_config 
PasswordAuthentication no
```

```
$ sudo service sshd restart
```

これでrootからのリモートログインが不可能になります。

```
$ ssh root@xxx.yyy.zzz.aaa -p 22
Received disconnect from xxx.yyy.zzz.aaa
```

### SSHのポート番号を変更

sshdだけでなくiptablesにも設定変更が必要なので注意。CentOS7はデフォルトでiptablesサービスが入っていないのでまずインストール

```
$ sudo yum install iptables-services
```

`sudo vi /etc/sysconfig/iptables` を編集。

```diff:/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
```

iptablesサービスを再起動します。

```
$ sudo service iptables restart
```

`sudo vi /etc/ssh/sshd_config` を編集。

```/etc/ssh/sshd_config 
Port 10022
```

```
$ sudo service sshd restart
```

ローカルPCに戻ってssh_configを編集します。

```diff:~/.ssh/ssh_config
#ConoHa
Host conoha
  HostName xxx.yyy.zzz.aaa
  User newuser
+  Port 10022
-  Port 22
  IdentityFile ~/.ssh/conoha
```

これで10022ポートを使ってSSHログイン出来るようになりました。

```
$ ssh conoha

# 22番ポートのログインは不可能に
$ ssh newuser@xxx.yyy.zzz.aaa -p 22
ssh: connect to host xxx.yyy.zzz.aaa port 22: Connection refused
```

再起動(sudo reboot)したときのために自動起動も設定しておきましょう。(ルーティングにiptablsを使うことを選んだのでfirewalldを停止する必要があることに注意です)

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

## まとめ

次は[Dockerなど必要なアプリケーションを入れていきましょう](http://qiita.com/ongaeshi/items/d590f58753b05fda672d)。おかしな部分がありましたら突っ込みなどいただけると幸いです。

## 参考文献
- [ヾ(oﾟωﾟo)ﾉﾞConoHaちゃんに作業用ユーザ追加してssh接続するやで！ - Qiita](http://qiita.com/harapeko_wktk/items/ad4a2e0cb7f00fdfbf0d)
- [CentOS - VPSのユーザー追加とrootログイン禁止（ConoHaの場合） - Qiita](http://qiita.com/59naga/items/82389e8c392bed844cd7)
- [CentOS7, iptables設定でハマった - Goldstine研究所](http://mosuke5.hateblo.jp/entry/2014/09/20/180326)
- [ｖｉエディタの使い方](http://net-newbie.com/linux/commands/vi.html)
- [【linux】sshのポートを変える（22番から変更） at softelメモ](https://www.softel.co.jp/blogs/tech/archives/1516)
- [TCP/IPポート番号一覧](http://www.vwnet.jp/mura/PortNumbers/tcpip-port.asp)
- [CentOS7 で iptables を使用できるように設定する | Webセキュリティの小部屋](http://www.websec-room.com/2015/03/28/2214)