삭제된 SSH 세션 종료

삭제된 SSH 세션 종료

내 SSH 세션이 다운되는 것 같습니다. 비록 그것이 내 주요 문제는 아니지만 가장 큰 문제는 내 이전 세션이 여전히 존재한다는 것입니다. 그리고 더 나쁜 것은 세션 중 하나가 실행 중이어서 visudo액세스할 수 없다는 것입니다!

who많은 세션이 표시되고 내가 알고 있는 현재 세션을 제외하고 모두 연결이 끊어졌습니다. 리소스를 확보할 수 있도록 이전 세션을 종료하려면 어떻게 해야 합니까?

답변1

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 

| sh종료하려는 PID를 확인하기 위해 마지막 항목 없이 이 작업을 수행할 수 있습니다 .

Linux를 사용하는 경우 다음을 사용할 수 있습니다.

pkill -o -u $USER sshd

가장 오래된 SSH 세션을 종료합니다. 현재 세션만 남을 때까지 이 작업을 계속하세요.

ServerAliveInterval 15데이터가 전송되지 않을 때 .ssh/config15초마다 연결 유지 메시지를 보내 도록 설정할 수도 있습니다 . man ssh_config더 많은 정보를 알고 싶습니다.

답변2

이렇게 하면 2일 이상 정지된 세션이 종료됩니다. 크론으로 작동합니다.

for i in `w|awk '{print $2,$5}'|grep days|cut -d' ' -f1`; do fuser -k /dev/$i; done

그러면 (마지막 활성 세션)을 제외한 모든 것이 종료됩니다. 터미널에서 실행하세요.

for i in `w|tail -n+3|awk '{print $2,$5}'|grep -v 0.00s|cut -d' ' -f1`; do fuser -k /dev/$i; done

답변3

해당 명령과 인수(예: procps에서)를 볼 수 있도록 프로세스를 나열하는 경우 ps -fsshd 프로세스가 표시되어야 합니다. 예:

sshd: user@pts/7

여기서 Terminal( pts/7)은 핵심 부분입니다. CurrentTerminal( )과 비교하면 tty어떤 세션이 활성 세션인지 확인할 수 있습니다. 물론 이를 수행하는 다른 방법도 있지만(예: 현재 실행 중인 셸의 PID를 보고 프로세스 트리에서 해당 PID를 찾는 등) 이것이 가장 간단한 방법일 것입니다. 그런 다음 다음을 사용할 수 있습니다.

# current tty name
TTY=$(tty | cut -f3- -d/)
# PIDs of other sshd processes
ps -o pid= -o command= -C sshd \
    | grep sshd:.*@ \
    | grep -v "@$TTY" \
    | sed "s/ sshd.*//"

그런 다음 PID를 입력하여 죽일 수 xargs있지만sshd새 연결을 처리하는 기본 프로세스가 종료되지 않았는지 항상 확인하세요..

관련 메모에서 ps출력 형식의 가변성으로 인해 -o pid= -o command=출력 구문 분석은 오류가 발생하기 쉬운 경우가 많습니다(특히 다양한 시스템에서).

관련 정보