Programing

이 ssh 터널을 닫는 방법은 무엇입니까?

crosscheck 2020. 9. 23. 07:15
반응형

이 ssh 터널을 닫는 방법은 무엇입니까? [닫은]


이 게시물에 설명 된대로 ssh 터널을 열었습니다. Zend_Db : SSH 터널을 통해 MySQL 데이터베이스에 연결하는 방법?

하지만 지금은 제가 실제로 무엇을했는지 모르겠습니다. 이 명령이 서버에 영향을 미칩니 까? 이제 로컬 mysql을 제대로 사용할 수 없기 때문에 어떻게이 터널을 닫을 수 있습니까?

OSX Lion을 사용하고 서버는 Ubuntu 11.10에서 실행됩니다.


ssh -f user@mysql-server.com -L 3306:mysql-server.com:3306 -N링크 한 게시물에 설명 된 대로이 명령을 실행했다고 가정합니다 .

명령의 분석 :

  1. ssh: 꽤 자명합니다. 을 호출 ssh합니다.
  2. -f: ( man ssh페이지에서)

    명령 실행 직전에 ssh가 백그라운드로 이동하도록 요청합니다. 이것은 ssh가 암호 나 암호를 요구하지만 사용자가 백그라운드에서 원하는 경우에 유용합니다.

    기본적으로 ssh연결을 설정하기 위해 암호를 입력 한 후 백그라운드로 보냅니다 . localhost로그인하는 대신에 쉘 프롬프트를 다시 제공합니다 remote-host.

  3. user@mysql-server.com: 로그인하려는 원격 서버입니다.
  4. -L 3306:mysql-server.com:3306: 이것은 흥미로운 부분입니다. -L( man ssh페이지에서) :

    [bind_address :] port : host : hostport 로컬 (클라이언트) 호스트의 지정된 포트가 원격 측의 지정된 호스트 및 포트로 전달되도록 지정합니다.

    따라서 로컬 포트 호스트 원격 포트-L 3306:mysql-server.com:3306바인딩합니다 .3306 3306mysql-server.com

    당신이에 연결하면 로컬 포트 3306연결이에 보안 채널을 통해 전달됩니다 mysql-server.com. 원격 호스트는 , mysql-server.com다음에 연결 mysql-server.com포트 3306.

  5. -N: 명령을 실행하지 않습니다. 이것은 "단지 전달 포트"(맨 페이지 인용)에 유용합니다.

이 명령이 서버에 영향을 미칩니 까?

예, 포트 3306 에서 localhostmysql-server.com 사이에 연결을 설정합니다 .

이 터널을 어떻게 닫을까요?

당신이 사용한 적이 있다면 -f, 당신은 것을 알 수 있습니다 ssh과정은 배경으로 머리를 열었습니다. 그것을 실행하는 것입니다 폐쇄의 더 좋은 방법은 ps aux | grep 3306, 찾기 pid의를 ssh -f ... -L 3306:mysql-server.com:3306 -N하고 kill <pid>. (또는 어쩌면 작동 kill -9 <pid>한다면 잊어 버립니다 kill). 그것은 당신의 다른 모든 연결을 죽이지 않는 아름다운 이점이 ssh있습니다. 두 개 이상있는 경우 다시 설정하는 것이 약간의 고통이 될 수 있습니다.

... 이제 로컬 mysql을 제대로 사용할 수 없기 때문입니다.

이는 로컬 mysql 프로세스를 효과적으로 "캡처"하고 연결을 시도하는 트래픽을 원격 mysql 프로세스로 전달 했기 때문 입니다. 훨씬 좋네요의 솔루션은하는 것 로컬 포트 3306을 사용하지 포트 포워드. 33060과 같이 사용되지 않는 것을 사용합니다. (높은 숫자는 일반적으로 덜 사용됩니다. "2525-> 25", "8080-> 80", "33060-> 3306"또는 약간 더 쉽게 기억할 수 있습니다.)

당신이 사용하는 경우에 따라서, ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N당신은 당신의 젠드 연결 - 투 - MySQL의 기능을 가리키는 것 localhost포트 33060에 연결하는 것, mysql-server.com포트를 3306. 분명히 localhost포트에 연결할 3306수 있으므로 로컬 mysql서버를 계속 사용할 수 있습니다 .


이것은 터미널에서 연 모든 ssh 세션을 종료합니다.

sudo killall ssh

참고 : 주석은 코드 블록을 지원하지 않으므로 답변으로 추가하십시오.

제 생각에는 사용하지 -f않고 대신 &. 그러면 죽여야 할 정확한 pid를 얻을 수 있습니다 .

ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
... do yer stuff... launch mysql workbench whatever
echo "killing ssh tunnel $pid"
kill $pid

또는 더 나은 방법은 다음과 같이 래퍼 스크립트로 생성하는 것입니다.

# backend-tunnel <your cmd line, possibly 'bash'>
ssh -N -L1234:other:1234 server &
pid=$!
echo "waiting a few seconds to establish tunnel..."
sleep 5
"$@"
echo "killing ssh tunnel $pid"
kill $pid

backend-tunnel mysql-workbench

backend-tunnel bash

참고 URL : https://stackoverflow.com/questions/9447226/how-to-close-this-ssh-tunnel

반응형