Я записал бы это как это:
awk -v seven_lines="b 34.c 53.b 54.a 45.d 44.d 63.d 64." '
seven_lines == l6 l5 l4 l3 l2 l1 $0 {print "pattern found at line " (NR-6)}
{l6=l5; l5=l4; l4=l3; l3=l2; l2=l1; l1=$0}
'
Машина, на которой набирается команда ssh tunnel, называется "ваш хост".
local: -L Указывает, что данный порт на локальном (клиентском) хосте должен быть перенаправлен на данный хост и порт на удаленной стороне.
ssh -L sourcePort:forwardToHost:onPort connectToHost
означает: подключиться по ssh к connectToHost
, и перенаправить все попытки подключения к local sourcePort
на порт onPort
на машине под названием forwardToHost
, которая может быть достигнута с машины connectToHost
.
remote: -R Указывает, что данный порт на удаленном (серверном) хосте должен быть перенаправлен на данный хост и порт на локальной стороне.
ssh -R sourcePort:forwardToHost:onPort connectToHost
означает: подключиться с помощью ssh к connectToHost
, и перенаправить все попытки соединения с удаленным sourcePort
на порт onPort
на машине под названием forwardToHost
, которая может быть доступна с вашей локальной машины.
-f
указывает ssh на фоновый режим работы после аутентификации, так что вам не придется сидеть и запускать что-то на удаленном сервере, чтобы туннель оставался живым. -N
говорит, что вам нужно SSH-соединение, но на самом деле вы не хотите выполнять никаких удаленных команд. Если вы создаете только туннель, то включение этой опции экономит ресурсы. -T
отключает выделение псевдо-tty, что вполне уместно, поскольку вы не пытаетесь создать интерактивную оболочку. Первое изображение представляет ваш случай. Если вы это сделаете
ssh -L 1081:localhost:3306 remotehost
все попытки подключения к зеленому порту 1081
перенаправляются через ssh-туннель на розовый порт 3306
на локалхосте удаленного хоста, т.е. на сам удаленный хост.
Теперь ваши php скрипты могут получить доступ к вашей базе данных через localhost:1081
. Но команда netstat
на вашем remotehost
не может найти ничего, прослушивающего порт 1081 (по крайней мере, не в результате туннеля).
Потому что розовый порт - это не прослушивающий порт, созданный ssh, а цель переадресации. И он перенаправляется не на порт 1081
, а на 3306
.
Действительно ли ваш db-сервер слушает порт 3306
или, возможно, порт 1081
? Если это так, то ваша команда должна быть изменена следующим образом:
ssh -L 1081:localhost:1081 remotehost
Если ваша база данных слушает порт 1081
, вы должны найти его с помощью netstat (независимо от ssh).
Вы не ожидали бы, что удаленная сторона послушает на порте 1081. Вы просите, чтобы туннель соединился с портом 3306 на удаленной стороне, и это - порт mysql по умолчанию. Могло бы стоить проверить, что это на самом деле слушает на том порте. С другой стороны, если Вы на самом деле хотите использовать порт 1081 с обеих сторон, заменить Вашим -L
опция с -L1081:localhost:1081
.
ssh -T -f -L1081:localhost:3306 ueser@remoteserver -p2222 -N
работы
– Recct
13.03.2013, 17:32