定時帰る術-RHEL９からのSCPについて

REHL9からは、SCPが非推奨になり、廃止じゃない、廃止じゃない
なので、RHEL9を作って、検証してみようと思う。


# 検証
OSのバージョンは9.3

```
Red Hat Enterprise Linux release 9.3 (Plow)
```

■ 送信側（何回も）：
```
[root@test9-1 tmp]# scp rhel-9.3-x86_64-dvd.iso 192.168.100.42:/var/tmp/                                                                                                 14% 1505MB 375.2MB/s   00:22
```



■ 受信側：

まずは、ファイルがちゃんととんできた。
```
[root@test9-2 tmp]# ll rhel-9.3-x86_64-dvd.iso
-rw-r--r-- 1 root root 1580400640  2月  3 09:29 rhel-9.3-x86_64-dvd.iso
```
って、詳細も見てみよう。
Modify/ChangeとBirthのが同じじゃないことがわかった
なので、SFTPを使っている可能性が高い
ここで、SCPとSFTPの違いことが現れた
**SFTPは、前回の転送が中断された場合、中断されたところから再開できる**
**SCPは、単純に新しい転送するだけなので、上書きになる**


（「2024-01-29」にもやったので、「Birth」が今日の日付になっていないけど、結論には影響しないと思う）
```
[root@test9-2 tmp]# stat rhel-9.3-x86_64-dvd.iso
  File: rhel-9.3-x86_64-dvd.iso
  Size: 1574895616      Blocks: 3075968    IO Block: 4096   通常ファイル
Device: fd00h/64768d    Inode: 405280      Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-01-29 13:24:33.746254258 +0900
Modify: 2024-02-03 09:06:27.389337241 +0900
Change: 2024-02-03 09:06:27.389337241 +0900
 Birth: 2024-01-29 13:24:33.746254258 +0900
```

プロセスも見てみよう。

■送信側
「3347」でSFTPを使っていることがわかった。
（「901」だけど、scpコマンドがbashから実行され、「egrep "ssh|scp"」で表示されない）
```
[root@test9-1 ~]#  ps -efww | egrep "ssh|scp"
root         845       1  0  1月29 ?      00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root         889     845  0  1月29 ?      00:00:00 sshd: root [priv]
root         900     889  0  1月29 ?      00:00:00 sshd: root@pts/0
root         969     845  0  1月29 ?      00:00:00 sshd: root [priv]
root         971     969  0  1月29 ?      00:00:00 sshd: root@pts/1
root        3311     845  0 09:03 ?        00:00:00 sshd: root [priv]
root        3313    3311  0 09:03 ?        00:00:00 sshd: root@pts/2
root        3346     901 17 09:05 pts/0    00:00:00 scp rhel-9.3-x86_64-dvd.iso 192.168.100.42:/var/tmp/
root        3347    3346 32 09:05 pts/0    00:00:01 /usr/bin/ssh -x -oPermitLocalCommand=no -oClearAllForwardings=yes -oRemoteCommand=none -oRequestTTY=no -oForwardAgent=no -s -- 192.168.100.42 sftp
root        3349    3314  0 09:05 pts/2    00:00:00 grep -E --color=auto ssh|scp
```
■受信側
受信側も同じく、SFTPを使っているね。
```
[root@test9-2 ~]#
[root@test9-2 ~]# ps -efww | grep ssh
root         856       1  0  1月29 ?      00:00:00 sshd: root [priv]
root         868     856  0  1月29 ?      00:00:00 sshd: root@pts/0
root         969       1  0  1月29 ?      00:00:00 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
root       14082     969  0 09:06 ?        00:00:00 sshd: root [priv]
root       14085   14082 26 09:06 ?        00:00:01 sshd: root@notty
root       14086   14085 16 09:06 ?        00:00:01 /usr/libexec/openssh/sftp-server
```



# おもしろいこと
ここでは、おもしろいことができる。
なんだというと、sshサーバ側の設定で、sftpが無効できる。
無効された場合、sftpが使えなくなって、通常のscp（sftp使わず）に戻るかというおもしろい検証ができるわけ。

早速受信側にSSHD設定を変更し、やってみよう。
変更前後のdiifは↓
(viやサービスの再起動なども書くのは、面倒くさいから割愛)
```
[root@test9-2 tmp]# diff /etc/ssh/sshd_config_orig /etc/ssh/sshd_config
123c123
< Subsystem     sftp    /usr/libexec/openssh/sftp-server
---
> #Subsystem    sftp    /usr/libexec/openssh/sftp-server
```


■送信側
もう一度SCPしてみると、エラーがでた

```
[root@test9-1 tmp]# scp rhel-9.3-x86_64-dvd.iso 192.168.100.42:/var/tmp/
root@192.168.100.42's password:
subsystem request failed on channel 0
Connection closed
```

# 振り返り

- 9系でSCPを使うなら、受信側にはsftpを有効にする必要
- 9系でネットワークが不安定の環境でもSCPが使える
- 8系でsftpが無効になっている場合、9系で設定踏襲にするとSCPが使えないのは要注意
- 8系でも9系でも、scpはsshdのポート経由でファイル転送するのが変わらないので、ネットワーク的には変更なし

以上