3

Я хочу попробовать и настроить простой способ управления настройками прокси-сервера SSH. Я обнаружил, что часто хочу подключиться к SSH к своему серверу из трех разных мест: в двух местах есть свой прокси-сервер, который мне нужен для использования в штопоре, и тот, у которого прокси-сервер вообще отсутствует , Есть ли способ, которым я могу настроить свой файл ~/.ssh/config для распознавания, какую ProxyCommand использовать? Причина, по которой я хотел бы сделать это, заключается в том, что я хочу настроить Fetchmail для туннелирования через мой сервер через SSH (используя crontab), и я не могу понять, как заставить это работать, независимо от того, в какой сети я нахожусь.

Приветствия.

1 ответ1

2

Вы можете выполнить настройку для каждого хоста в вашем .ssh/config:

Host ex1
HostName proxied.example.com
User myuser
ProxyCommand /usr/local/bin/corkscrew proxy.example.com 8080 %h %p

Host ex2
HostName nonproxy.example.com
User myuser
IdentityFile id_rsa

Так

SSH ex1

будет SSH к proxied.example.com и вызвать прокси-сервер штопор, и

SSH ex2

будет ssh к nonproxy.example.com и использовать файл идентификации из вашей папки .ssh .

Автоматическое обнаружение

То, что делает прокси-сервер corkscrew, создает соединение через локальный прокси-сервер и принимает входные данные для подключения через ssh. Вы можете использовать что угодно в качестве ProxyCommand при условии, что оно каким-либо образом подключается к удаленному ssh-серверу и принимает входные данные по стандартному входу.

Например, вы можете использовать netcat для установления соединения с удаленным хостом, а ssh будет общаться с netcat через стандартное соединение:

ProxyCommand nc %h %p

Когда вы подключаетесь к серверу с помощью этой прокси-команды, ssh запускает nc, чтобы установить tcp-соединение с удаленным хостом через порт 22, а затем ssh отправляет свои команды через стандартный вход nc.

Это бесполезно, поскольку nc устанавливает сеанс tcp вместо ssh и ничего не дает. За исключением того, что вы могли, например, создать скрипт-обертку с именем "proxytest", который проверил, можно ли установить прямое соединение с помощью nc, и, в противном случае, попытался использовать corkscrew - что-то вроде:

if nc -z $1 $2; then
   exec nc $1 $2  # try to connect directly
else
   exec corkscrew $3 $4 $1 $2  # set up proxy connection

Так что, если какой-либо из этих способов сработает, то будет доступен стандартный вход, который ssh может использовать для подключения - либо из netcat, либо из corkscrew. Так что ваш конфиг ssh будет иметь:

ProxyCommand proxytest %h %p proxy.example.com 8080

Существует готовый скрипт здесь , что вы можете попробовать, с соответствующими тестами и проверками ошибок. Прокрутите вниз до раздела "Другие хитрости".

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