Вы можете выполнить настройку для каждого хоста в вашем .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
Существует готовый скрипт здесь , что вы можете попробовать, с соответствующими тестами и проверками ошибок. Прокрутите вниз до раздела "Другие хитрости".