Linux Shell 指令碼限制ssh最大使用者登入數

來源:互聯網
上載者:User

標籤:登入限制   ssh session複製   ssh會話複製   最大登入數   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連接埠的串連使用者和每個使用者的串連數量,如果數量超過我設定的最大串連數量,則再通過命令找到這些串連的會話,再通過命令結束這些會話,從而實現目的。

  但這其中有幾個問題需要考慮:

  1. 使用者按鍵,特別是快速鍵(如Ctrl+D,Ctrl+C或Ctrl+\等的處理)

  2. pts的數值可能會shell指令碼中的最大值,除非新登入的使用者的pts數值只增加不減少

  3. 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 essentialif [[ ! -x `which lsof` ]]; thenyum install lsof -yRETVAL=$?if [[ "$RETVAL" -ne "0" ]]; thenecho "ERROR: can NOT use lsof command, please check your internet connection or install lsof by manual! "exit $RETVALfielse# TODO# for awk, grep, etcecho "SUCCESS: This shell script will knock out extra ssh connection "fi# a main worker# loopwhile : ; dossh_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; donumber_of_ssh_client=`lsof -i:$ssh_port | grep $ssh_client | wc -l`if [[ $number_of_ssh_client -gt $max_number_of_ssh_client ]]; thennumber_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 loginspkill -kill -t pts/$number_ptsif [[ $? -eq 0 ]]; thenecho "SUCCESS: extra connections  [email protected]/$number_pts has been knocked out! "elseecho "WARNNING: can NOT knock out extra connections! "fielse# TODO# too many INFO displayedecho "INFO: number of ssh connections is NORMAL! "# sleep 1sleep 1fidonedone

  注釋:指令碼中的幾個TODO可以多考慮考慮,其次裡面的蹩腳英語請自行略過,:)


本文出自 “通訊,我的最愛” 部落格,請務必保留此出處http://dgd2010.blog.51cto.com/1539422/1670233

Linux Shell 指令碼限制ssh最大使用者登入數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.