[CentOS 8]SSHについてのメモ

#はじめに
sshについて知らないこともまだまだあったので、そのメモです。

##OSバージョン

```
$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
```

#公開鍵を使用したパスワードなしのログイン

##公開鍵の作成

```
[client]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user01/.ssh/id_rsa): #パスワードを入れずにEnter
Created directory '/home/user01/.ssh'.
Enter passphrase (empty for no passphrase): #パスワードを入れずにEnter
Enter same passphrase again: #パスワードを入れずにEnter
Your identification has been saved in /home/user01/.ssh/id_rsa.
Your public key has been saved in /home/user01/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:0/SAWMk9845x3ZV5ausHNJ/5QE1D3992wYGWEz5cBck user01@centos01
The key's randomart image is:
+---[RSA 3072]----+
|       ..o   o**=|
|       oo.+ o=E+B|
|      . . o+.=.B*|
|         o.oo O *|
|        S .=.+ +B|
|         .. . ++o|
|             . o.|
|              . o|
|               . |
+----[SHA256]-----+

[client]$ ls -l .ssh/
合計 8
-rw-------. 1 user01 user01 2602  7月 13 15:38 id_rsa
-rw-r--r--. 1 user01 user01  569  7月 13 15:38 id_rsa.pub
```

##公開鍵のコピー
ここではclientのuser01で作成した公開鍵をdbsrvのdbadminにコピーします。

```
[client]$ ssh-copy-id dbadmin@dbsrv
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user01/.ssh/id_rsa.pub"
The authenticity of host 'dbsrv (192.168.100.102)' can't be established.
ECDSA key fingerprint is SHA256:oCUEvqcZwBDQP4NvbRwU92gSWj58nyoJV7qxhq17QOY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
dbadmin@dbsrv's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'dbadmin@dbsrv'"
and check to make sure that only the key(s) you wanted were added.
```
```
[dbsrv]$ ls -l .ssh/
合計 4
-rw-------. 1 dbadmin dbadmin 569  7月 13 15:46 authorized_keys
```

##ログインの確認

```
[client]$ ssh dbadmin@dbsrv
Activate the web console with: systemctl enable --now cockpit.socket

Last login: Mon Jul 13 15:48:05 2020
[dbsrv]$
```

#スーパーユーザーによる SSH を使用したログインの禁止
/etc/ssh/sshd_configファイルの PermitRootLoginパラメーターを設定して、ユーザーが root としてシステムにログインすることを許可または禁止する。

* yes : rootでログインできる（デフォルト）
* no : rootでログインできない

```sh:/etc/ssh/sshd_config

     43 # Authentication:
     44
     45 #LoginGraceTime 2m
     46 PermitRootLogin yes
     47 #StrictModes yes
     48 #MaxAuthTries 6
     49 #MaxSessions 10
```

ファイルを編集したら、`systemctl reload sshd`コマンドを実行する。

`systemctl reload sshd`コマンドは、サービスを完全に再起動するのではなく、設定ファイルを再度読み込む動作。
`systemctl restart sshd`コマンドでも変更は適用されるが、SSHサービスが再起動するので、もしそのホストへのアクティブな SSH 接続がある場合はすべて切断されてしまう。


#SSH のパスワードベース認証の禁止
/etc/ssh/sshd_configファイルの PasswordAuthentication パラメーターを設定して、ユーザーがパスワードベース認証を使用してシステムにログインできるかどうかを設定できる。
パスワード認証を禁止した場合、鍵認証でのログインとなる。

* yes : パスワード認証でログインできる（デフォルト）
* no : パスワード認証でログインできない

```sh:/etc/ssh/sshd_config
     69
     70 # To disable tunneled clear text passwords, change to no here!
     71 #PasswordAuthentication yes
     72 #PermitEmptyPasswords no
     73 PasswordAuthentication yes
     74
```
ファイルを編集したら、同様に`systemctl reload sshd`コマンドで設定ファイルを再読み込みする。


#ログインせずに任意のコマンドを実行する

```
[client]$ ssh dbadmin@dbsrv pwd
/home/dbadmin
```