autossh 터널을 중지 / 죽이는 방법? 터널이 있으므로이를 막는 올바른 방법은 무엇입니까? 이 작업을

이제 autossh 터널이 있으므로이를 막는 올바른 방법은 무엇입니까?

이 작업을 수행하는 쉬운 방법이없는 것 같습니다. 이 부분에 대한 문서가 명확하지 않습니다.

가장 쉬운 방법은 컴퓨터를 재부팅하는 것 같습니다. 이 올바른지?



답변

아니, 적절한 살인 방법 autossh은 단순히 프로세스를 죽이는 autossh것입니다.

그 이유는

# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable

그것은 autossh단순히 서비스가 아닌 쉘 스크립트 입니다. 마지막 줄에서 새 프로그램을 시작합니다.

exec /usr/lib/autossh/autossh "$@"

다시는 서비스가 아닙니다. 에 관해서는 exec(당신이 그것을 한 번 확인 할 수 배쉬 해커의 위키 )는 (다음 명령을 사용하여 현재 쉘을 대체하는 쉘 내장 명령입니다 /usr/lib/autossh/autossh "$@"새로운 프로세스를 시작하지 않고이 경우). 따라서 중지 하는 유일한 방법 autossh은 호출 스크립트 를 종료하는 것 입니다.

pkill -3 autossh

-3 플래그 사용의 중요성을 지적한 dviljoen 에게 감사드립니다 ( 아래 참조). 또한, 호출 명령 ( , 위의 명령 )은 이전 연결이 끊어진 것을 인식하자마자 새 연결을 시작 하기 때문에 연결 종료가 작동하지 않습니다 . ssh


답변

다음과 같이 auto ssh를 실행하십시오.

AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh

그것을 죽여 :

kill pid

BTW

pkill -9 autossh 잘못이다

-9그래서, 확인 프로세스가 정상적으로 종료하지하게 ssh때 프로세스가 계속이 autossh프로세스가 살해

없이도 -9여전히 나쁘다. 만약 여러 개의 터널을 운영하고 pkill있다면 모두 죽일 것이다.

올바른 방법은 AUTOSSH_PIDFILEenv var 를 설정 kill하고 pid 만 설정 하는 것입니다


답변

프로세스를 검색하십시오.

PS AUX | grep ssh

두 번째 열은 PID 번호입니다.

PID에 의한 킬 프로세스 🙂

-9 PID 번호 죽이기

루트 권한이 없으면 sudo를 사용하십시오 .


답변

나는 이것이 답변되었지만 위의 의견과 달리 pkill -3 autosshsshd 자식 프로세스를 사용 하지 않습니다.

.bashrc파일 에서이 기능을 사용 합니다.
기본적 --kill으로 autossh에 인수를 추가하는 것과 같습니다 .

  if [ "$1" = "--kill" ]; then
    ps aux |
    grep -P "(/usr/bin/ssh|/usr/lib/autossh/autossh)\s.*$2" |
    awk '{print $2}' |
    xargs -r kill
  else
    $(which autossh) "$@"
    echo "" # prevents line wrapping when you kill the ssh process
  fi

시스템에서 경로를 실행 which ssh하고 which autossh확인할 수 있습니다 .

첫 번째 인수가 아닌 한 --kill, 인수 를 autossh에 전달합니다.

이 스크립트는 autossh 및 ssh 인스턴스를 종료합니다. 포트 전달을 사용하는 경우 이것은 중요합니다. autossh 인스턴스 만 종료해도 터널이 종료되지 않고, 마지막으로 연결이 끊어진 경우 다시 연결되는 것을 막기 때문입니다.

특정 터널 만 종료하도록 검색어 (호스트 이름)를 지정할 수도 있습니다.

autossh --kill dbserver1dbserver1에 대한 연결 만 종료하면
autossh --kill dbserverdbserver1, dbserver2 등
autossh --kill dbserver이 종료되고 모든 autossh 연결이 종료됩니다.

명확히하기 위해 autossh로 시작한 SSH 세션 만 종료해야합니다.

ps aux | grep sshautossh 및 ssh 세션을 모두 실행 하는 동안 실행 하면 autossh로 시작한 세션이 전체 경로 (/ usr / bin / ssh 및 / usr / lib / autossh / autossh)를 사용한다는 것을 알 수 있습니다.
이 스크립트는 speicifc 경로로 시작한 프로세스에만 결과를 일치시킵니다. 나는 일반적으로 ssh전체 경로가 아닌 입력 하고 대부분의 사람들을 가정하기 때문에이 작업을 수행하여 정상적인 ssh 세션을 종료하지 못하게합니다.

이것이 다른 사람들을 돕기를 바랍니다.