Amazon EC2でSSHはできるのにSFTPができない

2011 年 6 月 30 日

最近はAmazon EC2をかなりちょくちょく使っています。
一番多い用途は、実運用ではなく、古いOS等でのテスト環境を作成するためだったりします。

ということで、今日も今日とて、CentOS5.3のAMIを見つけてきてインスタンスを作成したわけです。

SSHで必要な環境に整えて、さて必要なファイルをUPしよう、とSFTPでアクセスしたのですが、
接続直後に切断されてしまいます。
クライアント側のログを見ると、接続は確立しているのにすぐCloseしてしまっているようです。
接続が確立しているということは、認証鍵は機能しているようなので、
これはサーバ側のログを見てみるべきでしょう。

ということで /var/log/messages を見てみます。
sshd[1001]: error: subsystem: cannot stat /usr/lib/openssh/sftp-server: No such file or directory

驚愕の事実発覚。
SFTPはSSHDによって、サブシステムとして起動するわけですが、これが存在しないと。

sshd_configを見てみましょう。

vi /etc/ssh/sshd_config

Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
PasswordAuthentication no
PrintLastLog no
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
UsePAM yes

OpenSSH自体は存在するようなので、とりあえずsftp-serverのありかを探してみます。
find / -type f -name sftp-server
すると次の場所にあるようです。
/usr/libexec/openssh/sftp-server
(当たり前といえば当たり前な在りかですね)

先ほどのsshd_configのSubsystemを
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp /usr/libexec/openssh/sftp-server
と書き換えて、
/etc/init.d/sshd restart
でSFTPが起動するようになりました。

まーこれがCommunityAMIの落とし穴でもあり醍醐味でもあるということでしょうかね。

コメントをどうぞ