没有简单的方法来跟踪SSH和SFTP的实时每用户带宽使用情况。 我认为给每个用户分配一个端口可能会有帮助,但是我想知道我的方法是否可行。
(我不想提出问题247291中提出的几个sshd实例。)
在/etc/ssh/sshd_config :
Port 31001 Port 31002 Port 31003 Subsystem sftp /usr/bin/sftp-wrapper.sh
只有当端口是正确的时,文件sftp-wrapper.sh启动sftp服务器:
#!/bin/sh mandatory_port=3`id -u` current_port=`echo $SSH_CONNECTION | awk '{print $4}'` if [ $mandatory_port -eq $current_port ] then exec /usr/lib/openssh/sftp-server fi
/etc/profile几行防止用户连接到错误的端口:
if [ -n "$SSH_CONNECTION" ] then mandatory_port=3`id -u` current_port=`echo $SSH_CONNECTION | awk '{print $4}'` if [ $mandatory_port -ne $current_port ] then echo "Please connect on port $mandatory_port." exit 1 fi fi
现在应该很容易监控每个用户的带宽使用情况。 基于Rrdtool的应用程序可以生成如下图表:

我知道这不是一个完美的带宽使用计算:例如,如果有人对端口31001发起暴力攻击,这个端口上将会有很多stream量,尽pipe不是来自Bob。 但是这对我来说不是问题:我不需要精确计算每个用户的带宽使用情况,但是在标准情况下这个指标是近似正确的。
我认为更好的解决scheme是监视每个客户端端口号的带宽使用情况。 然后,您可以将此监视与来自auth.log端口号结合起来,以计算来自用户的所有连接的总和。