Как закрыть SSH-туннель? [закрытый]


Я открыл ssh-туннель, как описано в этом сообщении: Zend_Db: Как подключиться к базе данных MySQL через SSH-туннель?

но теперь я не знаю, что я на самом деле сделал. Влияет ли эта команда на что-либо на сервере? И как мне закрыть этот туннель, потому что теперь я не могу правильно использовать свой локальный mysql.

Я использую OSX Lion и сервер работает на Ubuntu 11.10.

3 68

3 ответа:

предполагая, что вы выполнили эту команду: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 связывает local порт 3306 до удаленный порт3306 хоста mysql-server.com.

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

  5. -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.

это потому, что вы фактически "захватили" localmysql обрабатывать и перенаправлять любой трафик, который пытается подключиться к нему, в remote

это убьет все сеансы 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