우리 회사는 하나의 서버 응용 프로그램을 실행해야하며 모든 사용자가 퍼티 터미널을 통해 액세스해야합니다. 20 개의 퍼티 터미널 만 열어야하는 쉘 스크립트를 작성하고 싶습니다. 21 번째 터미널이 열리면 해당 터미널을 즉시 닫고 싶습니다.
어떻게하면 되나요?
도와주세요.
답변
/etc/sshd_config
서버 측에서 편집 하고 라인을 변경하십시오.
#MaxSessions 10
에
MaxSessions 20
참조 man sshd_config
:
MaxSessions
Specifies the maximum number of open shell, login or subsystem
(e.g. sftp) sessions permitted per network connection. Multiple
sessions may be established by clients that support connection
multiplexing. Setting MaxSessions to 1 will effectively disable
session multiplexing, whereas setting it to 0 will prevent all
shell, login and subsystem sessions while still permitting for-
warding. The default is 10.
답변
George의 솔루션은 정상적으로 작동하지만 bash 스크립트를 요청했습니다 …
같은 옵션이 없습니다 그래서 다른 상황이 하나의 생각 MaxSessions
의 sshd
, 당신은 이런 식으로 뭔가를 사용할 수는 :
if [ "$(pgrep -cx processName)" -gt 20 ]; then pkill -xn processName; fi;
어떤 pkill -n
의 새로운 인스턴스를 죽일 것이다 processName
.
이 특별한 상황에 대한 올바른 해결책은 George의 대답입니다.
답변
나는 Ravexina 의 아이디어 를 정교하게 테스트하기로 결정했다 . 작동하며 설정된 ssh 연결 수를 제한하려는 경우 효과적입니다.
먼저 ssh 데몬이 연결없이 실행될 때 하나의 sshd
프로세스가 있음을 발견했습니다. 각각의 새로운 연결에 대해 두 개의 새로운 sshd
프로세스가 생성됩니다. 따라서 연결을 20 개로 제한하려면 임계 값은 20이 아니라 41 (1 + 2×20) 이어야합니다 .
그런 다음 이름 이 다음과 같은 실행 파일을 만들었습니다 ./usr/local/bin/limit-sshd
#!/bin/sh
if [ "$(pgrep -cx sshd)" -gt 7 ]
then
echo '\nThe limit was reached!\n'
pkill -xn sshd
fi
- 여기서 임계 값은 각각 7이며 연결은 3 개만 설정되고 나머지는 삭제됩니다.
마지막으로 다음 지시문을 추가했습니다 /etc/ssh/sshd_config
.
ForceCommand /usr/local/bin/limit-sshd; $SHELL
- 변수
$SHELL
는 기본 사용자의 쉘을 실행합니다. - 원하지 않는 효과는 인사말 메시지를 더 이상 사용할 수 없다는 것입니다.
- ssh 데몬을 다시 시작하는 것을 잊지 마십시오 :
sudo systemctl restart sshd.service
작동 방식은 다음과 같습니다 ( 애니메이션 데모를 보려면 이미지를 클릭하십시오 ).
또한 스크립트를 다음과 같이 수정하면 아무것도 죽일 필요가 없다는 것을 깨달았습니다.
#!/bin/sh
if [ "$(pgrep -cx sshd)" -gt 7 ]
then
echo '\nThe limit was reached!\n'
exit # This line is not mandatory
else
eval "$SHELL"
fi
그리고 /etc/ssh/sshd_config
이런 식으로 각각 :
ForceCommand /usr/local/bin/limit-sshd
답변
질문은 명확하지 않습니다. 먼저 어떻게 이해하고 어떤 방식으로 IMO를 요청해야하는지 알려 드리겠습니다.
하나의 서버가 특정 응용 프로그램을 제공하는 로컬 네트워크가 있습니다. 우리 팀은 PuTTY를 사용하여 컴퓨터에서 서버로 ssh 연결을 통해이 응용 프로그램에 액세스합니다. 각 팀 구성원에게는 ssh 연결을 설정하는 데 사용되는 고유 한 사용자 계정이 있습니다 ( 또는 모든 팀 구성원이 공통 사용자 계정을 사용함).
팀 구성원은 다른 용도로 서버를 사용하지 않으며 특정 사용자가 연결 수에 관계없이 ssh 연결 수를 20으로 제한하려고합니다 ( 또는 사용자 당 20 개 연결).
해석이 올 바르면 요구 사항을 충족하는 올바른 방법은 사용자 그룹 을 만든 다음 해당 그룹에 모든 사용자 계정을 추가 하고을 통해 maxlogins 수를 제한하는 것 /etc/security/limits.conf
입니다.
-
the-app-maxlogins
group id로 그룹 을 작성하십시오 (예 🙂10 000
.sudo groupadd -g 10000 the-app-maxlogins
-
해당 그룹에 사용자 추가-
sudo adduser <user> <group>
:for user in "user1" "user2" "user3"; do sudo adduser "$user" the-app-maxlogins; done
-
다음 행을 추가하여 전체 그룹 의 maxlogins
/etc/security/limits.conf
를 제한 하십시오 .%the-app-maxlogins - maxlogins 20
또는 다음 줄을 추가 하여 그룹 사용자 당 최대 로그인 수 를 제한 하십시오 .
@the-app-maxlogins - maxlogins 20
-
/etc/ssh/sshd_config
해당 그룹의 세션 멀티플렉싱을 비활성화하려면 파일의 맨 아래 (!)에 다음 줄을 편집 하고 추가하십시오 (아마도이 경우 필수 사항은 아닙니다).Match Group the-app-maxlogins MaxSessions 1
이 솔루션은 ssh 또는 tty를 통해 영향을받는 사용자의 로그인 수를 제한합니다. 그룹이 아닌 특정 사용자에게 적용하려면 다음과 같이 줄을 추가 limits.conf
하거나 .conf
디렉토리 내 별도의 파일에 넣으십시오 /etc/security/limits.d/
.
username - maxlogins 20
지시문의 실제 의미에 대한 간단한 설명 이이 답변에MaxSessions
제공됩니다 . 현재 답변의 주요 출처 는 동일한 L & U의 질문에 따른 또 다른 답변 입니다.
다른 답변을 내, 어떤 방법으로 해결 제공 할 수 있지만, 재미의 종류가 아닌 진정한 솔루션입니다.