linux远程连接最大数是多少,Linux Shell 脚本限制ssh最大用户登录数
我撰寫本文原來的意圖是想把“復制SSH渠道”和"copy SSH Session"這樣的功能從遠程ssh客戶端中剔除掉.因此想到可以在SSH服務端設置一下,但查閱了sshd_config的man手冊,發現里面的看起來限制ssh連接數量的參數(MaxSessions ,ClientAliveCountMax等)在復制SSH渠道中并不好用,即一個遠程ssh客戶端可以通過這種方式幾乎無限制的建立ssh會話,未免讓人覺得“不爽”。
例如,我正在做一件事情,突然想出去,但我不想改變當前終端中的任何操作,也不想讓別人在我出去后過來動我正在做的工作,那我可以簡單的按下Ctrl+S來鎖定終端數據輸入輸出(盡管輸入并不能鎖定,但輸入將對用戶不可見),當我回來時可以再通過按下Ctrl+Q來解除“屏幕鎖定”,這樣不熟悉Linux的同事就不會來干擾我的工作,而不用鎖定整個系統。但自己卻知道我可以通過復制SSH渠道/會話的方式來建立一個可用的新的SSH連接,而這樣的操作在以后繁雜的工作中是不可能逐一去查看的,因此想直接寫個shell腳本來實現這個需求。
思路還是比較簡單的,代碼也沒有幾行。首先這個腳本一定有循環,這樣才能起到持續化監測的能力,通過命令不斷的查詢sshd端口的連接用戶和每個用戶的連接數量,如果數量超過我設定的最大連接數量,則再通過命令找到這些連接的會話,再通過命令結束這些會話,從而實現目的。
但這其中有幾個問題需要考慮:用戶按鍵,特別是快捷鍵(如Ctrl+D,Ctrl+C或Ctrl+\等的處理)
pts的數值可能會shell腳本中的最大值,除非新登錄的用戶的pts數值只增加不減少
PAM安全模塊也許有更好的解決方案(shell腳本肯定不是最佳方案)
通過測試的腳本如下:#!/bin/bash
#?This?shell?script?will?knock?out?extra?ssh?connection
#?max_number_of_ssh_client
max_number_of_ssh_client=3
#?lsof?is?essential
if?[[?!?-x?`which?lsof`?]];?then
yum?install?lsof?-y
RETVAL=$?
if?[[?"$RETVAL"?-ne?"0"?]];?then
echo?"ERROR:?can?NOT?use?lsof?command,?please?check?your?internet?connection?or?install?lsof?by?manual!?"
exit?$RETVAL
fi
else
#?TODO
#?for?awk,?grep,?etc
echo?"SUCCESS:?This?shell?script?will?knock?out?extra?ssh?connection?"
fi
#?a?main?worker
#?loop
while?:?;?do
ssh_port=`netstat?-anopt?|?grep?sshd?|?awk?'{print?$4}'?|?awk?-F?':'?'{print?$2}'?|?grep?-v?^$?|?uniq?`
ssh_clients=`lsof?-i:$ssh_port?|?grep?\>?|?awk?'{print?$9}'?|?awk?-F?':'?'{print?$(NF-1)}'?|?uniq?|?awk?-F?'>'?'{print?$2}'`
for?ssh_client?in?$ssh_clients;?do
number_of_ssh_client=`lsof?-i:$ssh_port?|?grep?$ssh_client?|?wc?-l`
if?[[?$number_of_ssh_client?-gt?$max_number_of_ssh_client?]];?then
number_pts=`w?-hs?|?grep?$ssh_client?|?awk?'{print?$2}'?|?awk?-F?'/'?'{print?$2}'?|?awk?'BEGIN?{max=0}?{if?($1>max)?max=$1?fi}?END?{print?max}'`
#?TODO
#?another?solution?maybe?exist
#?kill?extra?logins
pkill?-kill?-t?pts/$number_pts
if?[[?$??-eq?0?]];?then
echo?"SUCCESS:?extra?connections??$ssh_client@pts/$number_pts?has?been?knocked?out!?"
else
echo?"WARNNING:?can?NOT?knock?out?extra?connections!?"
fi
else
#?TODO
#?too?many?INFO?displayed
echo?"INFO:?number?of?ssh?connections?is?NORMAL!?"
#?sleep?1
sleep?1
fi
done
done
注釋:腳本中的幾個TODO可以多考慮考慮,其次里面的蹩腳英語請自行略過,:)
總結
以上是生活随笔為你收集整理的linux远程连接最大数是多少,Linux Shell 脚本限制ssh最大用户登录数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法(C++)– 图(Grap
- 下一篇: 数据结构与算法(C++)– 贪婪算法(G