CentOS7.3でSSH接続(パスワード認証)する方法

[こちらの記事](http://qiita.com/uhooi/items/c41ccaed66e944aa859d)の続きです。

## はじめに

CentOSのインストール直後はSSH接続できず、ホストOSから操作できないため、SSH接続できるように設定します。
実務でもサーバーが遠隔にあることがほとんどであり、SSH接続でリモート操作することがよくあります。

## 環境

- VirtualBox：5.0.32 r112930
- ホストOS：macOS Sierra 10.12
- ゲストOS：CentOS 7.3-1611 64bit Minimal

## セットアップ(サーバー)

### rootユーザーのログイン

まず、rootユーザーでログインします。
[localhost login]に「root」、[Password]に設定したパスワードを入力してください。完了はEnterキーです。
注意点として、パスワードの入力は何も表示されませんが、問題なく入力されています。
最終ログイン日時と `[root@localhost ~]# _` が表示されたらログイン成功です。
<img width="804" alt="スクリーンショット 2017-02-16 22.56.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/138245/3e9db0a0-0c08-94b7-697f-b83fa142f729.png">

デフォルトでプロンプトは `[{ユーザー名}@{ホスト名} {カレントディレクトリパス}]` となっています。そのあとの `#` はrootユーザーという意味であり、一般ユーザーでログインすると `$` となります。

### SSHサーバーのインストール

`openssh-server` はMinimal ISOでもプリインストールされているため、インストール作業は不要です。

### SSHの設定

SSHの設定ファイルを修正します。
※viの使い方は割愛します。

```shell-session
# vi /etc/ssh/sshd_config
```

`#PermitRootLogin yes` を `PermitRootLogin no` 、 `#PasswordAuthentication yes` を `PasswordAuthentication yes` 、 `#PermitEmptyPasswords no` を `PermitEmptyPasswords no` に書き換え、 `:wq` で保存して終了します。
`PermitRootLogin` を `no` にすると、rootユーザーによるログインを許可しません。
rootユーザーでログインできるとクラックされやすい、また、rootユーザーで操作を誤ると取り返しのつかないことになることもあるため、一般ユーザーでしかリモートログインできないようにするのが一般的です。
`PasswordAuthentication` を `yes` にすると、パスワード認証を許可します。
パスワード認証より公開鍵認証の方がセキュリティの観点から望ましいですが、ここではパスワード認証とします。
`PermitEmptyPasswords` を `no` にすると、パスワードなしを許可しません。

### サービスの起動

SSHのサービスを起動します。

```shell-session
# systemctl start sshd.service
```

サービスが起動したか確認します。

```shell-session
# systemctl status sshd.service
```

緑の字で `active (running)` と表示されたらSSHのサービスが起動しています。

### ファイアウォールの設定

SSH用のポートはMinimal ISOでも元から開放されているため、設定は不要です。

### 一般ユーザーの作成

SSH接続する一般ユーザーを追加します。

```shell-session
# useradd {ユーザー名}
```

追加した一般ユーザーにパスワードを設定します。

```shell-session
# passwd {ユーザー名}
```

`New password:` `Retype new password:` でパスワードを2回入力したら、パスワードの設定は完了です。

先ほどrootユーザーによるリモートログインを禁止したため、rootユーザー向けのコマンドを実行できないですが、 `sudo` というコマンドを使用すれば一般ユーザーでもrootユーザー向けのコマンドを実行できるようになります。
CentOSではデフォルトで `sudo` できるグループが `wheel` グループのみに制限されているため、追加した一般ユーザーを `wheel` グループに追加し、 `sudo` できるようにします。

```shell-session
# usermod -G wheel {ユーザー名}
```

### ネットワークの設定

OSの起動時に自動でネットワークに接続するようにします。

```shell-session
# nmcli c mod enp0s3 connection.autoconnect yes
```

`c` は `connection` の略です。

### IPアドレスの確認

```shell-session
# ip a show enp0s3
```

`inet` から始まる箇所がサーバーのIPアドレス(IPv4)です。 

## 操作方法(クライアント)

macOSにはデフォルトでSSHクライアントがインストールされているため、ターミナルからSSH接続できます。
WindowsでもGit bashにはデフォルトでインストールされていますが、Tera Term(テラターム)やPuTTY(パティ)などのSSHクライアントを使用するのがいいと思います。

### SSH接続の開始

```shell-session
$ ssh {ユーザー名}@{サーバーのIPアドレス}
```

`The authenticity of host '{IPアドレス} ({IPアドレス})' can't be established.
ECDSA key fingerprint is SHA256:{英語の文字列}.
Are you sure you want to continue connecting (yes/no)?` のようなメッセージが表示されますが、こちらはそのサーバーに初めて接続する場合に表示されるメッセージであり、ここでは気にせず `yes` と入力します。

`[test@localhost ~]$ ` と表示されたら、SSH接続に成功しています。ここからの入力は全て指定したIPアドレスのサーバーに反映されます。

### SSH接続の終了

```shell-session
$ exit
```

## おわりに

IPアドレスはデフォルトで固定でなくDHCP(ipv4.method: auto)となっています。
通常、サーバーは固定のIPを使用しますが、ここではDHCPのままとしています。

## 参考リンク

- [Linux(CentOS7)でSSHを利用する。 - Qiita](http://qiita.com/sango/items/816136188387221f05b3)
- [SSHサーバー構築(OpenSSH) - Fedoraで自宅サーバー構築](http://fedorasrv.com/openssh.shtml)
- [CentOS7.2 64bit ネットワークの設定 | kakiro-web カキローウェブ](http://www.kakiro-web.com/memo/centos-network-setting.html)
- [sshで初回ログイン時に"The authenticity of host 'host' can't be established..."を聞かれないようにする設定 - oinume journal](http://oinume.hatenablog.com/entry/wp/391)
- [sudoユーザーを追加する方法 - Linux入門 - Webkaru](http://webkaru.net/linux/sudo-user-add/)