FileZillaでのSFTP接続
FileZilla ClientのSFTP接続の自動切断
FileZillaクライアントでのSFTP接続は「何らかの転送完了後」に「1分経過」すると自動で切断されます。
転送後に1分経過なので、接続しただけで放置している場合は1分では自動切断されません。
他のFTPクライアントでは「ダミーコマンドの送信」とか「KeepAliveパケットの送信」などの設定があり、接続を維持できますが、FileZillaには現在のところ無いようで転送終了後1分経過すると切断されてしまいます(SFTPでなくFTPにはキープアライブコマンド送信機能があります)
このため、少し経過してから再びFileZilla上で操作を行うとログインから行うため、SSHのログイン通知が頻繁に来てしまいます。
/var/log/secure を確認すると以下のような接続ログが頻繁に出ていました。
Nov 20 11:30:36 sshd[22935]: Connection from 192.168.2.2 port 4271 on 192.168.2.200 port 60000 Nov 20 11:30:36 sshd[22935]: Accepted password for root from 192.168.2.2 port 4271 ssh2
以下に試した事を記載しますが、いずれもSFTP接続では効果がなく、最終的にSSHログイン通知で無視するIPの判定を加えて解決しました。
sshd_configでのキープアライブ設定(サーバー側)
サーバ側でキープアライブの設定をしてみましたが、FileZillaのSFTP接続は維持してくれませんでした。
PoderosaなどのSSHクライアントでは有効なので接続が切れなくなりますね。
# サーバー側からのキープアライブパケット送信 ClientAliveInterval 15 ClientAliveCountMax 10 # TCPのキープアライブ TCPKeepAlive yes
FileZillaのFTPキープアライブ設定
FTPの設定項目内にありますが、もしかするとSFTPでも有効かも?と思ったので試しましたが駄目でした。
他のFTPクライアントのダミーコマンドなどに相当するものだと思ったのですが、SFTPでは効きません。
FileZillaのタイムアウト設定
FileZilla設定の「接続」にある「タイムアウト」を大きくしてみましたが、これは「操作中」のタイムアウトなので自動切断とは無関係でした。
SSHのログイン通知スクリプトを修正
FileZillaやサーバー側のsshd設定では対処できなさそうなので、メール通知スクリプト側で対処します。
従来のsshrc
以下のように書いておくとSSH接続があるとメールで通知してくれますが、何度も再接続されるとメールがどんどん来てしまいます。
/etc/ssh/sshrc
#!/bin/bash ip=`echo $SSH_CONNECTION | cut -d " " -f 1` hostname=`hostname` fqdn=`hostname -f` logger -t ssh-wrapper $USER login from $ip sendmail -t <<EOF To: hoge <hoge@example.com> From: ${hostname} <no-reply@${fqdn}> Subject: SSH Login $USER from $ip User $USER just logged in from $ip アクセス元:$ip ユーザー:$USER EOF
修正版sshrc(無視するIPのリストを追加)
自分以外の端末の場合だけメールでログイン通知してくれれば良いので、信頼するIPとして普段自分が使う端末のIPを列挙し、一致しなかった場合にのみ通知するようにします。
/etc/ssh/sshrc
#!/bin/bash # 信頼するIP(半角スペース区切りで列挙) TRUST_LIST="192.168.2.1 192.168.2.2" # メール送信元 MAIL_FROM="piyo <piyo@example.com>" # メール宛先 MAIL_TO="hoge <hoge@example.com>" # SSH接続中のIP取り出し ip=`echo $SSH_CONNECTION | cut -d " " -f 1` # ログ出力 logger -t ssh-wrapper $USER login from $ip # リストと比較して信頼していないIPからならメール for HOST in $TRUST_LIST do # 信頼するIPと一致したら終了(メール送信しない) if [ $HOST == $ip ]; then exit 0 fi done # メール送信 sendmail -t <<EOF To: $MAIL_TO From: $MAIL_FROM Subject: SSH Login $USER from $ip User $USER just logged in from $ip アクセス元:$ip ユーザー:$USER EOF
コメントフォーム