先週にopenSUSEをLeapからTumbleweedに乗り換えました。
そしてFileZillaでWindowsとLinux間のファイル転送ができなくなった。
その時はsshとscpが使えますが、sftpは使えません。
>sftp -v ${servername}
debug1: Exit status 127
というエラーコードが出てきました。
調べると、127はsftp-serverが存在しないか場所が間違ったかのどちらです。
YAST Software Managerを開いて、opensshの中身を調べると、sftp-serverは/usr/libexec/ssh/sftp-server、sshd-configは/usr/etc/ssh/sshd_configに置いたらしくってとりあえず/usr/etc/ssh/sshd_configの
#Subsystem sftp /usr/libexec/ssh/sftp-server
Subsystem sftp internal-sftp
を修正した。改善されませんでした。
そして/etc/ssh/sshd_configを開くと、
Subsystem sftp /usr/lib/ssh/sftp-server
が書かれています。しかしTumbleweedの/usr/libにsshというdirectoryが存在しません。
ここを
Subsystem sftp internal-sftp
に修正して
sudo systemctl restart sshd
でsshdを再起動したら、sftpもFileZillaも使えるようになった。
まとめ
SSHサーバーの設定ファイルは/usr/etc/ssh/sshd_configではなく/etc/ssh/sshd_configです。
Tumbleweedのopensshはsftp-serverを/usr/libexec/ssh/sftp-serverにインストールした。
sftpのエラーコードが127の場合、/etc/ssh/sshd_configのSubsystem sftpを/usr/libexec/ssh/sftp-server(package managerでsftp-serverの場所を特定できる時はその場所)もしくはinternal-sftpに指定すれば解決できるかもしれません。