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
      
 
  
  
  
  



コメントフォーム