Я не уверен, возможно ли то, что я пытаюсь сделать, но я пытаюсь сделать так, чтобы SSH-соединение проходило через localhost с переадресацией портов.
Причина, по которой я хочу это сделать, заключается в том, что у меня есть некоторая конфигурация на облачном провайдере, где экземпляр получает другой IP-адрес каждый раз, когда он инициализируется, и это означает, что мне нужно менять несколько настроек в моей среде разработки при каждом запуске. Мне было интересно, могу ли я как-то провести его через некоторые статические настройки localhost, я мог бы сделать это немного менее утомительным.
Итак, на данный момент я могу подключиться следующим образом, и я добавил переадресацию портов следующим образом:
ssh [email protected] -L2222:localhost:2222
Я надеялся, что тогда я смогу сделать что-то вроде:
ssh luca@localhost -p 2222
но это приводит к ошибке:
ssh_exchange_identification: read: Connection reset by peer
Я удивлен, это не отказ в соединении, не тайм-аут и т. д., поэтому мне интересно, не проблема ли это с настройками.
решение1
У меня есть некоторая конфигурация на облачном провайдере, где экземпляр получает другой IP-адрес каждый раз, когда он инициализируется, и это означает, что мне приходится менять несколько настроек в моей среде разработки при каждом запуске. Мне было интересно, могу ли я как-то провести его через какую-то статическую настройку localhost, я мог бы сделать это немного менее утомительным.
Обычный метод решения этой проблемы — DNS. Создайте поддомен с очень низким TTL и обновите его записи A/AAAA, чтобы они указывали на новый экземпляр всякий раз, когда он создается заново. Некоторые облачные провайдеры даже могут автоматизировать это.
(Если глобальный DNS не работает, то /etc/hosts также подойдет.)
Итак, на данный момент я могу подключиться следующим образом, и я добавил переадресацию портов следующим образом:
ssh [email protected] -L2222:localhost:2222
Вероятно, ваш удаленный сервер не настроен на прослушивание SSH-подключений на порту 2222. Он настроен только на стандартный порт 22. Поэтому нужный вам вариант переадресации:
-L 2222:localhost:22
Вот 2222
порт, который будет открыт на вашем компьютере, и localhost:22
это конечный пункт назначения, к которому сервер попытается подключиться.
Я удивлен, это не отказ в соединении, не тайм-аут и т. д., поэтому мне интересно, не проблема ли это с настройками.
Переадресация SSH -L
не работает на уровне пакетов, как переадресация портов вашего маршрутизатора. Она работает на уровне TCP – клиентсампрослушивает соединения и всякий раз, когда получает их, запрашивает у сервера подключение к конечному пункту назначения.
Итак, существует 3 цепочечных соединения: клиент №2 → клиент №1 → сервер → пункт назначения.
Это означает, что если серверу не удается подключиться, клиент № 1 (выполняющий переадресацию) не может выдать ошибку «В подключении отказано» для клиента № 2, поскольку локальное подключение фактически было установлено.принялуже. Единственное, что он может сделать, это закрыть существующее соединение без передачи данных. Отсюда и "Сброс соединения пиром".