Linux Shell 스 크 립 트 ssh 최대 사용자 로그 인 수 제한
예 를 들 어 저 는 한 가지 일 을 하고 있 습 니 다. 갑자기 나 가 고 싶 지만 현재 터미널 의 어떠한 조작 도 바 꾸 고 싶 지 않 습 니 다. 다른 사람 이 제 가 나 간 후에 제 가 하고 있 는 일 을 움 직 이게 하고 싶 지 않 습 니 다. 그러면 저 는 Ctrl + S 를 누 르 면 터미널 데이터 의 입 출력 을 잠 글 수 있 습 니 다. (입력 이 잠 겨 있 지 않 지만 입력 은 사용자 에 게 보이 지 않 습 니 다)내 가 돌아 올 때 Ctrl + Q 를 누 르 면 '화면 잠 금' 을 해제 할 수 있다. 그러면 리 눅 스 에 익숙 하지 않 은 동료 들 이 내 일 을 방해 하지 않 고 시스템 전 체 를 잠 그 지 않 아 도 된다.그러나 저 는 SSH 채널/세 션 을 복사 하 는 방식 으로 사용 가능 한 새로운 SSH 연결 을 만 들 수 있다 는 것 을 알 고 있 습 니 다. 이런 조작 은 앞으로 복잡 한 작업 에서 하나씩 볼 수 없 기 때문에 셸 스 크 립 트 를 직접 써 서 이 수 요 를 실현 하고 싶 습 니 다.
생각 은 비교적 간단 하고 코드 도 몇 줄 이 없다.우선 이 스 크 립 트 는 순환 이 있어 야 지속 적 인 모니터링 능력 을 가 질 수 있 습 니 다. 명령 을 통 해 sshd 포트 의 연결 사용자 와 모든 사용자 의 연결 수량 을 계속 조회 하고 제 가 설정 한 최대 연결 수량 을 초과 하면 명령 을 통 해 이 연 결 된 세 션 을 찾 은 다음 명령 을 통 해 이 세 션 을 끝 냅 니 다.
그러나 그 중 몇 가지 문 제 는 고려 해 야 한다.
#!/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 는 많이 고려 할 수 있 습 니 다. 그 다음 에 어 설 픈 영 어 는 스스로 생략 하 십시오.:)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SSH 키 쌍이 손실된 경우 EC2 인스턴스에 대한 SSH 연결 복원얼마 전에 안타깝게도 중요한 EC2 인스턴스에 속한 SSH 키 쌍을 잃어버렸습니다. 그 시점에서 우리는 방금 인스턴스의 스냅샷을 찍고 새 키 쌍으로 새 인스턴스를 생성했습니다. 이 블로그 게시물에서는 SSH 연결을 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.