Как закрыть SSH-туннель? [закрытый]
Я открыл ssh-туннель, как описано в этом сообщении: Zend_Db: Как подключиться к базе данных MySQL через SSH-туннель?
но теперь я не знаю, что я на самом деле сделал. Влияет ли эта команда на что-либо на сервере? И как мне закрыть этот туннель, потому что теперь я не могу правильно использовать свой локальный mysql.
Я использую OSX Lion и сервер работает на Ubuntu 11.10.
3 ответа:
предполагая, что вы выполнили эту команду:
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
связывает local порт3306
до удаленный порт3306
хостаmysql-server.com
.при подключении к local порт
3306
, соединение передается по защищенному каналу наmysql-server.com
. Элемент удаленный хост,mysql-server.com
затем подключается кmysql-server.com
порт3306
.
-N
: не выполняйте команду. Это полезно для "просто переадресации портов" (цитирование справочной страницы).влияет ли эта команда на что-либо на сервере?
Да, он устанавливает связь между localhost и mysql-server.com по порту 3306.
и как мне это сделать закройте этот туннель...
если вы использовали
-f
, вы заметите, чтоssh
процесс вы открыли головы в фоновом режиме. Более приятный способ закрытия-запуститьps aux | grep 3306
найтиpid
наssh -f ... -L 3306:mysql-server.com:3306 -N
иkill <pid>
. (Или, может быть,kill -9 <pid>
; я забываю, если простоkill
работает). Это имеет прекрасное преимущество не убивая всех остальныхssh
соединения; если у вас есть более одного, восстановление их может быть небольшим ... боль.... потому что теперь я не могу правильно использовать свой локальный mysql.
это потому, что вы фактически "захватили" local
mysql
обрабатывать и перенаправлять любой трафик, который пытается подключиться к нему, в remote
Примечание: добавление в качестве ответа, так как комментарии не поддерживают блоки кода.
на мой взгляд лучше не использовать
-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