SSH-L Туннель, больше не работающий

Я записал бы это как это:

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}
'
1
13.03.2013, 16:59
2 ответа

Я нарисовал несколько эскизов

Машина, на которой набирается команда ssh tunnel, называется "ваш хост".

ssh tunnel starting from local


ssh tunnel starting from remote

Introduction

  1. local: -L Указывает, что данный порт на локальном (клиентском) хосте должен быть перенаправлен на данный хост и порт на удаленной стороне.

    ssh -L sourcePort:forwardToHost:onPort connectToHost означает: подключиться по ssh к connectToHost, и перенаправить все попытки подключения к local sourcePort на порт onPort на машине под названием forwardToHost, которая может быть достигнута с машины connectToHost.

  2. 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).

12
27.01.2020, 23:11

Вы не ожидали бы, что удаленная сторона послушает на порте 1081. Вы просите, чтобы туннель соединился с портом 3306 на удаленной стороне, и это - порт mysql по умолчанию. Могло бы стоить проверить, что это на самом деле слушает на том порте. С другой стороны, если Вы на самом деле хотите использовать порт 1081 с обеих сторон, заменить Вашим -L опция с -L1081:localhost:1081.

2
27.01.2020, 23:11
  • 1
    Вы правы, что это не показывает на другом конце, я предполагаю, что у меня были параметры в неправильном порядке как ssh -T -f -L1081:localhost:3306 ueser@remoteserver -p2222 -N работы –  Recct 13.03.2013, 17:32

Теги

Похожие вопросы