삭제 된 SSH 세션 종료 SSH 세션이 중단되는 것 같습니다.

내 주요 세션이 아니지만 SSH 세션이 중단되는 것 같습니다. 주요 문제는 이전 세션이 여전히 살아 있다는 것입니다 visudo.

who 연결이 끊어진 것으로 알고있는 현재 세션을 제외한 여러 세션이 모두 표시됩니다. 이전 세션을 종료하여 리소스를 해제하려면 어떻게해야합니까?



답변

즉각적인 문제를 해결하기 위해 sudoers 파일이 잠겨 있으면 잠금 파일을 삭제하기 만하면됩니다. 일반적으로`/etc/sudoers.tmp “이며, 확인하려면 man 페이지에서 visudo를 확인하십시오. 잠금 파일을 삭제하면 visudo를 다시 실행할 수 있습니다.

여전히 걸려있는 모든 세션을 삭제하려면 먼저 자신의 현재 세션의 pid를 찾으십시오. 그런 다음 자신의 pid가 12345이면

ps -ef | grep sshd | grep -v root | grep -v 12345 | grep -v grep | awk '{print "sudo kill -9", $2}' |sh

당신은 | sh죽일 계획중인 PID를 확인하기 위해 마지막으로하지 않고 그것을 원할 수도 있습니다 .

Linux를 사용하는 경우 대신 사용할 수 있습니다

pkill -o -u YOURUSERNAME sshd

가장 오래된 SSH 세션을 종료합니다. 현재 세션이 유일한 세션이 될 때까지 계속하십시오.

당신은 또한 설정할 수 있습니다 ServerAliveInterval 15당신의 .ssh/config데이터가 전송되지 않은 경우 킵 얼라이브 메시지를 15 초마다 보내. man ssh_config자세한 내용은.


답변

ps -fprocps 와 같이 명령과 인수를 볼 수 있도록 프로세스를 나열하면 다음과 같은 sshd 프로세스가 표시됩니다.

sshd: user@pts/7

터미널 ( pts/7)은 여기서 핵심 부분입니다. 현재 터미널 ( 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=).


답변

이렇게하면 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


답변