Ответ 1
Предполагая, что вы выполнили эту команду: ssh -f [email protected] -L 3306:mysql-server.com:3306 -N
, как описано в сообщении, которое вы связали.
Поломка команды:
-
ssh
: это довольно понятно. Вызываетssh
. -
-f
: (На страницеman ssh
)Запрашивает ssh для перехода к фону непосредственно перед выполнением команды. Это полезно, если ssh будет запрашивать пароли или фразы, но пользователь хочет это в фоновом режиме.
По существу, отправьте
ssh
в фоновый режим, как только вы ввели какие-либо пароли, чтобы установить соединение; он возвращает запрос оболочки обратно вlocalhost
, а не записывает вас вremote-host
. -
[email protected]
: удаленный сервер, на который вы хотите войти. -
-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
. Затем удаленный хост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 [email protected] -L 33060:mysql-server.com:3306 -N
, тогда вы указывали бы свою функцию Zend connect-to-mysql на localhost
на порт 33060
, который подключился бы к mysql-server.com
на порту 3306
. Очевидно, вы все равно можете подключиться к localhost
на порту 3306
, так что вы все равно можете использовать локальный сервер mysql
.