Как закрыть 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 как описано в посте вы связаны.

разбивка на команды:

  1. ssh: Это довольно очевидно. Вызывает ssh.
  2. -f: (С man ssh страница)

    запрашивает ssh для перехода в фоновый режим непосредственно перед выполнением команды. Это полезно, если ssh собирается запросить пароли или passphrases, но пользователь хочет его в фоновом режиме.

    по сути, отправить ssh в фоновом режиме, как только вы ввели пароль для установления соединения; это дает командной строки на localhost вместо того, чтобы войти в remote-host.

  3. user@mysql-server.com: удаленный сервер, на который вы хотите войти.
  4. -L 3306:mysql-server.com:3306: это интересный бит. -L (от man ssh страница):

    [bind_address:] порт: хост: hostport Указывает, что данный порт на локальном (клиентском) хосте должен быть перенаправляется на данный хост и порт на удаленной стороне.

    так -L 3306:mysql-server.com:3306 связывает местные порт 3306 до удаленный порт 3306 хоста mysql-server.com.

    при подключении к местные порт 3306, соединение пересылается по защищенному каналу в mysql-server.com. The удаленный хост, mysql-server.com затем подключается к mysql-server.com порт 3306.

  5. -N: не выполняйте команду. Это полезно для "just forwarding ports" (цитирование справочной страницы).

влияет ли эта команда на что-либо на сервере?

Да, он устанавливает связь между 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.

это потому, что вы фактически "захватили"местные 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