Предполагая, что вы выполнили эту команду: 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
: не выполнять команду. Это полезно для «просто пересылки портов» (цитируется страница руководства).
Эта команда влияет на что-нибудь на сервере?
Да, он устанавливает соединение между 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
процесс и перенаправили любой трафик, который пытается подключиться к нему, удаленному mysql
процессу. Гораздо лучше , решение было бы не использовать локальный порт 3306 в порт вперед. Используйте что-то, что не используется, например 33060. (Более высокие числа обычно используются реже; довольно часто переносятся такие комбинации, как "2525-> 25", "8080-> 80", "33060-> 3306" или похоже. Облегчает запоминание).
Итак, если вы использовали ssh -f user@mysql-server.com -L 33060:mysql-server.com:3306 -N
, вы бы затем указали свою функцию Zend connect-to-mysql localhost
на порт 33060
, который будет подключаться к mysql-server.com
порту 3306
. Очевидно , что вы все еще можете подключиться к localhost
порту 3306
, поэтому вы все равно можете использовать локальный mysql
сервер.
-9
не требуетсяkill
, учитывая, что процесс все еще работает нормально ;-)Это убьет все сеансы ssh, которые вы открыли с терминала.
источник
killall ssh
- довольно безрассудная команда. Я советуюps aux | grep ssh
выполнить поиск в вашем списке процессов (например, как было предложено @simont выше), чтобы узнать идентификатор конкретного процесса вашего туннельного процесса ssh. Тогда можно убить именно pid.Примечание: добавление в качестве ответа, поскольку комментарии не поддерживают блоки кода.
На мой взгляд, лучше НЕ использовать
-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
источник
-f
позволяетssh
продолжить сеанс, даже если сеанс терминала закрыт, в отличие от перехода в фоновый режим. Захватитьpid
использованиеps aux | grep ssh | grep <LOCAL-PORT>
довольно тривиально.-f
также имеет то преимущество, что при необходимости у локального пользователя запрашивается пароль для входа. Если вы используете&
, это приглашение не будет видно пользователям, если они не переведут процесс на передний план (например, с помощьюfg
).