1

Если название звучит запутанно, это так, и я очень запутался. Вот ситуация:

  1. У меня есть prod-сервер prod1 который блокирует входящий / исходящий трафик из / во весь внешний Интернет
  2. Кроме того, единственный способ, которым я могу использовать SSH на этом сервере, - это сначала SSHing к внутреннему бастиону bastion.foo.com , затем ssh с sshconfig, например, ProxyCommand ssh -W %h:%p bastion.foo.com .

На prod1 я хочу иметь возможность подключиться к конечной точке API, например, curl -I https://api.com (который использует порт 443 в качестве https), каким-то образом туннелируя через мое соединение ssh с этим сервером (конечно, только когда я подключен ). Прочитав несколько постов в блоге, я подумал, что RemoteForward был ответом:

Host prod1
HostName ...
User ...
IdentityFile ...
RemoteForward 443 api.com:443
ProxyCommand ssh -W %h:%p bastion.foo.com

Но когда я ssh prod1 первое, что сервер говорит, это:

Предупреждение: переадресация удаленного порта для прослушивающего порта 443 не удалась

Как мне сделать то, что я пытаюсь сделать? Я на правильном пути?

1 ответ1

1

Есть действительно симпатичный рисунок, который объясняет RemoteForward в openssh. Но удаленная пересылка, вероятно, более сложна в вашем случае использования, чем вы описываете.

Вам нужно изменить как минимум /etc/hosts чтобы сделать его хотя бы немного прозрачным для вашего приложения:

127.0.0.1 api.com

Или измените ваше приложение, чтобы подключиться к localhost напрямую, а не к api.com.

И обратите внимание, что

Привилегированные порты могут быть перенаправлены только при входе в систему как root на удаленной машине.

от man ssh_config(5) . Это означает, что вы не можете связать порт 443 без привилегий root (или даже другие механизмы, такие как SELinux, могут блокировать это). Вам нужны эти привилегии или, скорее, вы должны выбрать другой локальный порт, и это делает его еще менее прозрачным для вашего приложения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .