나는 이것에 대해 혼란스러워합니다. 매뉴얼 페이지에서:
-f Requests ssh to go to background just before command execution.
다음 명령을 사용하여 SSH를 시작하면 -f
작동 중인 터널이 생겼습니다. 하지만 일단 작업이 끝나면 더 이상 상호 작용하는 방법을 모르겠습니다. 예를 들어,SSH 터널을 닫을 수 없습니다.내가 끝내면.
내가 아는 일반적인 방법은 작동하지 않습니다. 예를 들어, jobs
아무것도 반환되지 않습니다. 명령 ~
이 인식되지 않습니다(사용 방법을 모르겠습니다).
그러나 pgrep
SSH 터널이 여전히 실행 중이라는 메시지가 표시됩니다(터미널을 닫은 후에도). 어떻게 상호작용하나요? 어떻게 끄나요?
답변1
master mode
특히 좋은 스크립팅 솔루션은 제어 명령용 소켓과 함께 를 사용하는 것입니다 .
ssh -f -N -M -S <path-to-socket> -L <port>:<host>:<port> <server>
다시 닫으려면:
ssh -S <path-to-socket> -O exit <server>
이렇게 하면 프로세스 ID에 대한 greping 및 다른 방법과 연관될 수 있는 타이밍 문제를 방지할 수 있습니다.
답변2
여기서 해결책을 찾았습니다.http://www.g-loaded.eu/2006/11/24/auto- looking-ssh-tunnels/
가장 좋은 방법 - 자동으로 폐쇄되는 터널
앞서 언급했듯이 -f -N 스위치 조합을 사용하는 대신 -f만 사용할 수 있지만 원격 시스템에서 명령을 실행할 수도 있습니다. 하지만 터널을 초기화하기만 하면 되므로 어떤 명령을 실행해야 할까요?
이때 잠은 가장 유용한 명령이 될 수 있습니다! 이 특별한 경우 수면에는 두 가지 장점이 있습니다.
- 아무것도 하지 않으므로 리소스를 소비하지 않습니다.
- 사용자는 실행 기간을 지정할 수 있습니다.
이것이 SSH 터널을 자동으로 닫는 데 어떻게 도움이 되는지 아래에 설명되어 있습니다.
10초 동안 원격 시스템에서 sleep 명령을 실행하는 동안 백그라운드에서 ssh 세션을 시작합니다. 초는 중요하지 않습니다. 그 사이에 이전과 같이 vncviewer를 실행합니다.
[me@local]$ ssh -f -L 25901:127.0.0.1:5901 [email protected] sleep 10; \
vncviewer 127.0.0.1:25901:1
이 경우 SSH 클라이언트에 SSH 세션을 백그라운드로 포크(-f)하고 터널을 생성(-L 25901:127.0.0.1:5901)한 후 원격 서버에서 10초 동안 sleep 명령을 실행하도록 지시합니다(sleep 10).
이 방법과 이전 방법(-N 스위치)의 차이점은 기본적으로 이 경우 SSH 클라이언트의 주요 목표는 터널을 생성하는 것이 아니라 10초 동안 sleep 명령을 실행하는 것입니다. 터널을 만드는 것은 일종의 부작용이자 부차적인 목표이다. vncviewer가 없으면 SSH 클라이언트는 더 이상 수행할 작업이 없어 터널을 파괴하므로 10초 후에 종료됩니다.
sleep 명령을 실행하는 동안 다른 프로세스(이 경우 vncviewer)가 터널을 사용하기 시작하고 10초 이상 터널을 점유하면 SSH 클라이언트는 원격 작업(sleep 수행)을 완료하더라도 터널을 계속 사용할 수 없습니다. ).터널. 다른 프로세스가 터널을 점유했기 때문에 종료되었습니다. 즉, SSH 클라이언트는 vncviewer도 종료해야 하기 때문에 터널을 파괴할 수 없습니다. vncviewer가 터널 사용을 중지하면 SSH 클라이언트도 목표를 완료했기 때문에 종료됩니다.
이렇게 하면 백그라운드에서 SSH 프로세스가 실행되지 않습니다.
답변3
터널을 종료하려면 ps -C ssh
또는 ps | grep ssh
기타 변형을 사용하여 터널을 실행 중인 SSH 프로세스를 확인하세요. 그런 다음 죽여라.
또는 이 포트가 열려 있는 프로세스를 확인하여 프로세스를 찾을 수 있습니다.
netstat -lnpt | awk '$4 ~ /:1234$/ {sub(/\/.*/, "", $7); print $7}'
귀하의 컴퓨터에서 실행 중인 모든 SSH 클라이언트를 (귀하의 사용자로서) 종료하려면 pkill ssh
그렇게 하십시오.
답변4
터널을 시작할 때:
ssh -fN -D 8080 SOME_IP_HERE -l LOGIN_NAME_HERE
-f
명령이 실행되기 전에 SSH에 백그라운드로 들어가도록 요청합니다.-N
원격 명령을 실행하지 마십시오. 이는 포트 전달에 유용합니다.-D
로컬 "동적" 애플리케이션 수준 포트 전달을 지정합니다.-l
원격 컴퓨터에 로그인한 사용자를 지정합니다.
다음을 사용하여 이 기능을 끌 수 있습니다.
ps -lef | grep ssh | grep "8080" | awk "{print \$2}" | xargs kill