繁体   English   中英

拒绝特定主机/IP 到服务器的并行 ssh 连接

[英]deny parallel ssh connection to server for specific host / IP

  1. 我有一台 bot 机器(通过移动设备控制),它连接到服务器并通过方法 os“ssh、shell 脚本、os 命令、sql 查询等”从中获取信息,而不是通过互联网提供该信息(私有)
  2. 我想禁止仅通过机器人机器与服务器进行这种多重连接......还有其他机器连接到服务器,但不能受到影响

认为

客户端 A 从他的移动访问 bot 机器(通过网页)而不是 bot 机器连接到服务器(第一次会话)如果此连接的过程在此期间为 5 分钟,bot 机器将创建、查询、删除、附加、更新等等

在这 5 分钟的平均时间内(假设第一个会话开始后 2 分钟)客户端 B 从他的移动访问机器人(通过网页)而不是机器人连接到服务器(第二个会话)现在它将与第一个会话冲突并制造浩劫……

局限性

  1. 现在首先我不想在服务器上编辑任何设置
  2. 我不想编辑网页/手机等
  3. 我已经知道并行 shell 脚本的锁定文件方法,它是在脚本级别实现的,但是操作系统命令和诸如 bash 脚本中没有的东西是什么

我的想法

我认为每当我们创建与服务器的连接时,它都会创建一个名为 what ever ( SSH ) 的进程,该进程可以在 ps -fu OSUSER 中查看,因此通过将唯一的 id/tag/name 应用于我们的连接,我们可以识别一个会话是否处于活动状态或不。 一旦机器人连接到服务器,这将被检查。 但我不知道该怎么做....还请提出更多关于它的信息。 还有没有办法确定现有进程是否被挂起或者进程启动或过去的时间?

我假设您有一个 ssh 帐户的单次登录,并且这会在登录时运行一个脚本

在登录时将这样的内容添加到脚本中

#!/bin/bash
LOCK_FILE="/tmp/sshlock"
trap "rm $LOCK_FILE; exit" SIGHUP SIGINT SIGTERM

if [ $(( (`date +%s` - `stat -L --format %Y $LOCK_FILE`) < (30*60) )) ]; then
   exit 0
fi
touch $LOCK_FILE

当ssh登录调用的进程结束时,删除$LOCK_FILE

trap语句是这种锁定方式的重要组成部分,请务必使用它

“30 * 60”是 30 分钟超时,感谢这个问题的答案如何从 /bin/sh 判断文件是否早于 30 分钟?

也许尝试使用limits.conf 来为用户/组强制执行1 次登录的硬限制。

您可能需要定期执行 cron 作业来检查和删除任何陈旧的登录信息。

锁/互斥体很难正确使用并增加复杂性。 Limits.conf 是大多数 unix/linux 系统的标准功能,应该更可靠,强调应该...

这里提出了一个类似的问题: https : //unix.stackexchange.com/questions/127077/number-of-ssh-connections-on-a-single-linux-machine

详情请见: http : //linux.die.net/man/5/limits.conf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM