Linux(CentOS7)でSSHを利用する。


# 概要
Linux(CentOS7)にsshを導入する方法をサーバー編とクライアント編に分けて綴ります。

# SSHって？
ネットワーク越しに他のコンピュータを操作する機能、簡単に言うとリモート操作のことだよ！

※イメージ
![ssh2.png](https://qiita-image-store.s3.amazonaws.com/0/97611/56dbaa2e-479f-ac88-c811-ac1226934634.png)
サーバーにSSH接続することで、クライアント(AさんやBさん)からサーバーマシンを操作することができるよ！

とっても便利だね！

# 手順
## サーバー編
### 1. インストール確認
まずは、
`# yum list installed | grep ssh`
で、 `openssh-server` がインストールされていることを確認してね！

なかったら、
`# yum -y install openssh-server`
でインストールしてね！

### 2. 設定の確認
サービスを起動する前に、sshd_configの設定を確認しよう。
`# vim /etc/ssh/sshd_config`

<table style="margin:0 12;">
<tr><br>今回使う設定。</tr>
<tr><th style="text-align:center;">項目</th><th style="text-align:center;">説明</th></tr>
<tr><td>Port</td><td>SSH接続を受け付けるポート番号。<br>※今回はデフォルト値を使用するので#でコメントアウト！</td></tr>
<tr><td>PermitRootLogin</td><td>rootユーザーでのログインを許可するか否か。<br>※今回は"no"を指定してね！</td></tr>
<tr><td>PasswordAuthentication</td><td>パスワード認証を許可するか否か。<br>※今回は"yes"を指定してね！</td></tr>
</table>

### 3. サービスの起動
インストールの確認が取れたら、
`# systemctl start sshd.service`
で、sshdを起動してね！

`# systemctl status sshd.service`
問題なさそうかな？

### 4. ファイアウォール設定
ssh用のポートは元から開放されているかも知れないけど、一応確認してみよう。
`# firewall-cmd --list-all`

services の欄に `ssh` が入っていれば大丈夫！

もし入っていなかったら、
`# firewall-cmd --permanent --add-service=ssh`
で追加してね！

### 5. ユーザーの作成
手順2でrootユーザーでの接続を封じたので、SSH用のユーザーを作成するよ！

useraddで新規ユーザーを作成
`# useradd testuser`
※[testuser] には任意のユーザー名を指定

さっき作ったユーザーにパスワードを設定
`# passwd testuser`
※[testuser] には↑で作ったユーザー名を指定

`New password:` 任意のパスワードを入力
`Retype new password:` 確認の為もう一度同じパスワードを入力

とっても簡単ね！

## クライアント編
### 1. インストール確認
サーバーの時と同様に、
`# yum list installed | grep ssh`
で、 `openssh-clients` がインストールされていることを確認してね！

なかったら、
`# yum -y install openssh-clients`
でインストールしてね！

### 2. SSH接続を試みる

`$ ssh testuser@???.???.???.???`

[testuser] には サーバー編-手順5 で作ったユーザー名を、
[???.???.???.???] にはサーバーのIPアドレスを指定してね！

<br>
`[testuser@???-???-???-??? ~]$ `
こんな表示になったらリモート接続成功だよ！

この状態でのコマンド実行はすべてサーバーマシンに反映されるよ！

<br>
SSH接続を終了する場合は `exit` ！
`[testuser@???-???-???-??? ~]$ exit`

元に戻ったかな？
`$ `


# トラブルシューティング
うまくいかない場合はここを読んでみてね。

## 接続拒否(1)
`ssh: connect to host ???.???.???.??? port 22: Connection refused`
こんなエラーが発生する場合、多分ファイアウォール設定がちゃんとできていないです。

サーバー編-手順4 をもう一度確認してみてね！

※VirtualBox等のVMを使用している場合はポートフォワーディングの設定も確認してみてね！
(参考 : [VirtualBoxにSSH接続しようとしてConnection refused。](https://qiita.com/sango/items/1b57a9641499971ca806#_reference-9ae6982ac9592f15f424))

## 接続拒否(2)
`Permission denied, please try again.`
sshコマンドで指定したユーザーがサーバー側に存在しないか、入力したパスワードが間違っている可能性があります。

サーバー側マシンでユーザー一覧を確認してみてね！
`vim /etc/passwd`
ここに testuser(※任意のユーザー名) が存在しなかったら、ユーザーが作られていないよ！

サーバー編-手順5 をもう一度確認してみてね！

## タイムアウトエラーが発生する
`ssh: connect to host ???.???.???.??? port 22: Connection timed out`
恐らく、sshdのポート設定とファイアウォールのポート設定が食い違っているとこのエラーが発生します。

例えば、
1. (サーバー)sshd_config の Port 設定を 2222 に変更しました
2. (サーバー)firewall-cmd の services には ssh が登録されています
3. (クライアント)`ssh testuser@???.???.???.??? -p 2222` を実行
これは多分タイムアウトが発生します。

実は、 firewall-cmd の services - ssh はポートが22に固定されているのです。

対処法としては、 firewall-cmd で直接2222ポートを開放するか、 services - ssh のポートを書き換えるか、があるよ。

ここでは後者の方法を説明するよ。
サーバーマシンで設定を試してみてね。

`# vim /usr/lib/firewalld/services/ssh.xml`
まずはvimでファイアウォール(services-ssh)の設定ファイルを開くよ。

```xml:ssh.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>
```

このファイルの、 `port="22"` の部分をsshd_configのPortと同じ番号に書き換えてね！ 

そしたら、firewalldをリロード！
`# systemctl reload firewalld.service`
これで services - ssh のポート番号変更が適用されたよ！

クライアントマシンからもう一度SSH接続を試してみてね。

※やり方が悪いのか、 `# systemctl reload firewalld.service` でコケることが何度かあったので、
　その時は `# systemctl start sshd.service` してあげてください。

# 注意点
今回は分かり易さ重視でパスワード認証やデフォルトのポート設定を採用しましたが、
安全性を重視するのであれば鍵認証やポートの変更等を行なうことをお勧めします。

# 参考
sshd_configの設定方法や鍵を使用した通信方法等はこちらのサイトが分かり易いかと思います。
私も参照させていただきました。 m(_ _)m

- [sshd の設定（sshd_config）](http://www.nina.jp/server/slackware/openssh/sshd_config.html)
- [はじめての自宅サーバ構築 - Fedora/CentOS - SSHサーバの構築(OpenSSH)](http://kajuhome.com/openssh.shtml)