Якщо припустити, що ви виконали цю команду: 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
сервер.