유휴 SSH 세션을 종료하고 싶습니다. 이 원격 서버는 많은 사용자가 사용하고 있는데, 내가 소유한 세션의 PID를 어떻게 식별할 수 있나요?
이것을 실행하면 who
사용자 이름으로 태그가 지정된 SSH 세션 목록이 표시됩니다.
$ who
me pts/0 2020-11-23 18:05 (tmux(id).%0)
me pts/1 2020-11-06 13:28 (<ip 1>)
someone pts/2 2020-11-09 09:36 (<ip 2>)
someone pts/3 2020-11-26 20:26 (<ip 2>)
...
을 실행하면 pstree
세션에 더 이상 사용자 이름 태그가 지정되지 않습니다.
$ pstree -p | grep sshd
|-sshd(930)-+-sshd(3518)---sshd(3536)---python(5736)-+-{python}(5744)
| |-sshd(4285)---sshd(4308)
| |-sshd(5428)---sshd(5450)
...
답변1
루트가 아닌 이상 다른 프로세스에서는 아무 것도 할 수 없으므로 sshd
모든 프로세스에 신호를 보내는 것만으로는 위험하지 않습니다.
pkill sshd
자신의 프로세스로 명시적으로 제한하려면 다음을 수행하세요.
pkill -U "$USER" sshd
USER
또는 실행 중인 셸에서 변수가 사용되지 않는 경우 "$LOGNAME"
대신 시도 "$USER"
하거나
pkill -U "$(id -un)" sshd
이 명령에 대한 설명서도 참조하십시오 pkill
.
일치하는 프로세스의 프로세스 ID 목록을 얻으려면 pgrep
대신 사용하세요. 표현하거나 나열할 때만 or with를 pkill
사용하세요 .pkill
pgrep
-o
가장 오래된프로세스.
답변2
그렇다면 원격 서버에서 실행 root
하지 마십시오. pkill sshd
그렇지 않으면 다시 연결할 수 없습니다 ssh: connect to host yourdomain.com port 22: Connection refused
. 대신에:
달리기
w
. 마지막 열( 라벨이 붙음 )WHAT
에서 유휴 명령을 찾으세요 . 그런 다음 두 번째 열( 레이블이 지정됨TTY
)을 보고 유휴 세션을 찾으십시오. 예:pts/0
.달리기
ps aux | grep pts/0
. 마지막 열에서 유휴 명령을 찾으세요. 해당 PID는 두 번째 열에 있습니다(예: )12345
. 또한-bash
해당 PID를 찾아 기록해 둡니다(예: )12346
.kill 12345; kill 12346
위의 PID로 실행하세요.재실행
w
.pts/0
다시 표시되어서는 안 됩니다.