Как закрыть 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