내 주요 세션이 아니지만 SSH 세션이 중단되는 것 같습니다. 주요 문제는 이전 세션이 여전히 살아 있다는 것입니다 visudo
.
who
연결이 끊어진 것으로 알고있는 현재 세션을 제외한 여러 세션이 모두 표시됩니다. 이전 세션을 종료하여 리소스를 해제하려면 어떻게해야합니까?
who
더 이상 0이 아님)를 위해 작동하고 있습니다 .
내 주요 세션이 아니지만 SSH 세션이 중단되는 것 같습니다. 주요 문제는 이전 세션이 여전히 살아 있다는 것입니다 visudo
.
who
연결이 끊어진 것으로 알고있는 현재 세션을 제외한 여러 세션이 모두 표시됩니다. 이전 세션을 종료하여 리소스를 해제하려면 어떻게해야합니까?
who
더 이상 0이 아님)를 위해 작동하고 있습니다 .
답변:
즉각적인 문제를 해결하기 위해 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
자세한 내용은.
grep -v 12345
구문의 일부가 어떤 용도로 사용되는지 확실하지 않습니다 . 포함되지 않은 모든 것을 전달 12345
합니까?
grep -v 12345
"일치하는 모든 행을 제거합니다"를 의미 12345
합니다. 따라서 먼저 자신의 세션의 PID를 식별하고 대신 해당 PID를 사용해야합니다 12345
.
who
또는 top
여전히 많은 수의 서명 된 사용자를 표시 한 후에도 1 만 표시되어야합니다. 어떻게하면 새로 고칠 수 있습니까?
ps -f
procps 와 같이 명령과 인수를 볼 수 있도록 프로세스를 나열하면 다음과 같은 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=
).
fuser -k /dev/pts/0
면who
출력 에 터미널 과 같은 것을 만들 수 있습니다. 그러나 SIGHUP을 무시한 사람들은 조금 이상합니다. 그들이screen
세션이나 무언가 에서 달리고 있었습니까 ?