我的 SSH 会话似乎在下降,但这不是我的主要问题 - 主要问题是我以前的会话仍然存在,更糟糕的是其中一个会话正在运行,visudo
阻止我访问它!
who
显示许多会话,除了我知道的当前会话已断开连接,如何终止旧会话以释放其资源?
Jen*_*y D 82
要解决当前的问题,即 sudoers 文件被锁定,您可以简单地删除锁定文件。它通常是`/etc/sudoers.tmp";检查visudo的手册页进行验证。如果删除锁定文件,则可以再次运行visudo。
要删除所有仍处于挂起状态的会话,首先要找出您自己当前会话的 pid。然后,如果你自己的pid是12345,做
ps -ef | grep sshd | grep -v -e grep -e root -e 12345 | awk '{print "sudo kill -9", $2}' | sh
Run Code Online (Sandbox Code Playgroud)
您可能希望在没有最后| sh
一个的情况下执行此操作,只是为了检查您计划杀死的 PID。
如果您使用的是 Linux,则可以改为使用
pkill -o -u $USER sshd
Run Code Online (Sandbox Code Playgroud)
杀死您最旧的 SSH 会话。继续这样做,直到您当前的会话成为唯一剩下的会话。
您可能还想设置ServerAliveInterval 15
在.ssh/config
没有数据发送时每 15 秒发送一条 keepalive 消息。man ssh_config
想要查询更多的信息。
小智 8
这将终止挂起 2 天以上的会话。它可以作为一个cron。
for i in `w|awk '{print $2,$5}'|grep days|cut -d' ' -f1`; do fuser -k /dev/$i; done
Run Code Online (Sandbox Code Playgroud)
这将杀死除您的(最后一个活动会话)之外的所有内容。从终端运行它。
for i in `w|tail -n+3|awk '{print $2,$5}'|grep -v 0.00s|cut -d' ' -f1`; do fuser -k /dev/$i; done
Run Code Online (Sandbox Code Playgroud)