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 세션을 종료하지 못하게합니다.

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


답변