Создать SSH Tunnel не работает с прокси

387
Peter

У меня есть доступ к серверу с использованием SSH с помощью командной строки:

ssh my-server

с этим файлом .ssh / config:

Host * AddKeysToAgent yes UseKeychain yes IdentityFile ~/.ssh/id_rsa  Host my-server HostName 1.2.3.4 User user ProxyJump some.proxy.com IdentityFile ~/.ssh/id_rsa 

Однако, если я хочу создать туннель с сервером для доступа к нему через браузер, например, используя:

sudo ssh -L 80:my-server:80 my-server

Я получаю следующую ошибку:

ssh: Could not resolve hostname my-server: nodename nor servname provided, or not known 

Я предполагаю, что использование ssh таким образом игнорирует прокси, который настроен в .ssh/configфайле. Это правильно или я что-то упустил? Есть что-то еще, что я могу попробовать?

0
Я не уверен в деталях, но я не думаю, что имена серверов в опции `-L` разрешаются через файл ~ .ssh / config. Что произойдет, если вы используете вместо этого `sudo ssh -L 80: 127.0.01: 80 my-server`? Gordon Davisson 6 лет назад 0
Спасибо за ваш комментарий, но я получаю ту же ошибку "Не удалось разрешить имя хоста my-server ...". Peter 6 лет назад 0
Работает ли он вообще без туннеля (часть -L)? Если нет, я бы заподозрил какое-то странное различие в том, как пишется имя хоста (например, простой штрих ASCII или необычный штрих Unicode) или странное форматирование в файле конфигурации. Попробуйте напечатать файл конфигурации с помощью `LC_ALL = C cat -vet ~ / .ssh / config` и посмотрите, не выглядит ли что-нибудь странное (кроме" $ "в конце каждой строки -` cat -e` делает это, чтобы показать где концы линии). Если в строках есть «^ M» перед «$», у вас есть файл в формате DOS / Windows, и это может вызвать проблемы. Gordon Davisson 6 лет назад 0
Он не работает с частью `-L`, но файл` .ssh / config` выглядит нормально (без странного форматирования или окончания строки DOS). Использует ли команда `ssh -L ...` даже запись `ProxyJump` в файле` .ssh / config` по умолчанию? Peter 6 лет назад 0
Насколько я понимаю, `-L` не должен влиять на запись` ProxyJump`. Он должен установить SSH-соединение с клиентом -> some.proxy.com -> 1.2.3.4, а затем, когда оно установлено * и * получено соединение через локальный порт 80, скажите удаленному концу (1.2.3.4) открыть Соединение с my-сервером: 80. И AIUI преобразование «my-server» в адрес для подключения осуществляется с помощью обычного поиска имени хоста на удаленном компьютере (1.2.3.4), полностью игнорируя любые конфигурационные файлы. Gordon Davisson 6 лет назад 0
О, я только что понял проблему. Когда вы используете `sudo ssh`, он запускает` ssh` от имени root и ищет / использует конфигурационный файл ssh учетной записи root, а не ваш. Проблема в «sudo», а не «-L». Попробуйте добавить `-F ~ / .ssh / config` в команду и посмотрите, исправит ли это. (Примечание: ваша оболочка преобразует часть `~ /` в * ваш * домашний каталог перед запуском `sudo`, поэтому для этого будет использоваться ваш файл конфигурации, а не root.) Gordon Davisson 6 лет назад 0
В этом есть смысл. Я попробую это завтра, но я думаю, это должно сработать. Peter 6 лет назад 0

1 ответ на вопрос

0
Gordon Davisson

После погони за красными сельдями в комментариях, я почти уверен, что настоящая проблема не имеет ничего общего ни ProxyJumpс -Lтуннелем; это из-за sudo. Запуск sudo sshзапускает sshкоманду под идентификатором пользователя root и, следовательно, будет искать .ssh / config в домашнем каталоге корневой учетной записи, а не в вашей. И ~ root / .ssh / config не имеет записи для my-server(если она вообще существует).

Вы должны быть в состоянии исправить это, добавив -F ~/.ssh/configк sshопциям, чтобы сказать, использовать ли ваш конфигурационный файл, а не root. Обратите внимание, что ~/часть будет расширена оболочкой, прежде чем она будет передана sudo(и затем ssh) в качестве параметра, поэтому оболочка развернет ее в вашем домашнем каталоге, а не в корневом каталоге.

ОДНАКО, я не проверял это, но я думаю, что IdentityFile ~/.ssh/id_rsaзаписи в вашем конфигурационном файле сломаются, потому что они будут преобразованы в корневой каталог ~ / .ssh. Вам может потребоваться указать явный путь к домашней директории вместо ~ярлыка. Другой возможностью было бы добавить -i ~/.ssh/id_rsaв командную строку, чтобы она снова была развернута оболочкой, работающей как вы.

Кроме того, вы, вероятно, будете получать предупреждения о неизвестных хостах и ​​т. Д., Так как вы будете использовать файл root ~ / .ssh / known_hosts.