이 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
링크 한 게시물에 설명 된 대로이 명령을 실행했다고 가정합니다 .
명령의 분석 :
ssh
: 꽤 자명합니다. 을 호출ssh
합니다.-f
: (man ssh
페이지에서)명령 실행 직전에 ssh가 백그라운드로 이동하도록 요청합니다. 이것은 ssh가 암호 나 암호를 요구하지만 사용자가 백그라운드에서 원하는 경우에 유용합니다.
기본적으로
ssh
연결을 설정하기 위해 암호를 입력 한 후 백그라운드로 보냅니다 . 에localhost
로그인하는 대신에 쉘 프롬프트를 다시 제공합니다remote-host
.user@mysql-server.com
: 로그인하려는 원격 서버입니다.-L 3306:mysql-server.com:3306
: 이것은 흥미로운 부분입니다.-L
(man ssh
페이지에서) :[bind_address :] port : host : hostport 로컬 (클라이언트) 호스트의 지정된 포트가 원격 측의 지정된 호스트 및 포트로 전달되도록 지정합니다.
따라서 로컬 포트 를 호스트 의 원격 포트 에
-L 3306:mysql-server.com:3306
바인딩합니다 .3306
3306
mysql-server.com
당신이에 연결하면 로컬 포트
3306
연결이에 보안 채널을 통해 전달됩니다mysql-server.com
. 원격 호스트는 ,mysql-server.com
다음에 연결mysql-server.com
포트3306
.-N
: 명령을 실행하지 않습니다. 이것은 "단지 전달 포트"(맨 페이지 인용)에 유용합니다.
이 명령이 서버에 영향을 미칩니 까?
예, 포트 3306 에서 localhost 와 mysql-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
'Programing' 카테고리의 다른 글
JavaScript에서 json-object의 키 가져 오기 (0) | 2020.09.23 |
---|---|
목록에서 이상 값을 거부하는 numpy 내장 기능이 있습니까? (0) | 2020.09.23 |
입력 유형 날짜에 날짜 설정 (0) | 2020.09.23 |
자바에서 시차를 계산하는 방법은 무엇입니까? (0) | 2020.09.23 |
UICollectionViewCell에 둥근 모서리 및 그림자 추가 (0) | 2020.09.23 |