🐧 4 способа подключения к SSH и SCP через прокси-сервер (jump) на Linux

Мануал

В этом руководстве мы узнаем, как использовать SSH или SCP через прокси-сервер (jump host).

Спонсор данного руководства – Бух Глобал

SCP через прокси-сервер

Метод 1: использование scp с ProxyJump

В пакете openssh версии 7.4p1-11 или новее мы можем использовать опцию ProxyJump для передачи файлов с помощью прокси-сервера.

Синтаксис команды scp для передачи файлов через прокси :

# scp -o "ProxyJump <User>@<Proxy-Server>" <File-Name> <User>@<Destination-Server>:<Destination-Path>

Например:

# scp -o "ProxyJump user@10.23.100.70" dataFile.txt  user@192.168.10.100:/tmp
user@10.23.100.70's password: 
user@192.168.10.100's password: 
dataFile.txt

Где мой прокси-сервер – 10.23.100.70, а целевой сервер – 192.168.10.100.

Метод 2: использование scp с ProxyCommand

SCP использует ssh в качестве основного протокола, и, следовательно, мы можем использовать параметры ssh вместе с командами scp.

Настройка SSH для упрощения вашей жизни

Синтаксис для использования опции ProxyCommand с командой scp:

# scp -o "ProxyCommand ssh <user>@<Proxy-Server> nc %h %p" <File-Name> <User@<Destination-Server>:<Destination-Path>
Где:
  • %h будет заменен именем хоста для подключения
  • %p будет заменен портом

При использовании параметра ProxyCommand убедитесь, что пакет nmap-ncat установлен на прокси-сервере, который предоставляет команду nc, в противном случае отобразится следующее сообщение об ошибке.

bash: nc: command not found
ssh_exchange_identification: Connection closed by remote host
lost connection

Например:

# scp -o "ProxyCommand ssh user@10.23.100.70 nc %h %p" dataFile.txt  root@192.168.10.100:/tmp
user@10.23.100.70's password: 
root@192.168.10.100's password: 
dataFile.txt                                                                                     100%    5     0.0KB/s   00:00
Где мой прокси-сервер – 10.23.100.70, а целевой сервер – 192.168.10.100.

SSH через прокси-сервер

Метод 1: передать ProxyCommand с использованием параметров ssh

Мы снова можем использовать ProxyCommand для входа по ssh на другой сервер с помощью прокси-сервера.

Синтаксис SSH через прокси будет следующим:

# ssh -o "ProxyCommand ssh user_name_on_proxy@hostname_or_IP_of_proxy nc %h %p" user_name_on_server@hostname_or_IP_of_server

Пример: войти от пользователя root на 192.168.10.100 через прокси на 10.23.100.70 с учетными данными на прокси для proxy_user

# ssh -o "ProxyCommand ssh proxy_user@10.23.100.70 nc %h %p" root@192.168.10.100
proxy_user@10.23.100.70's password: 
root@192.168.10.100's password: 
Last login: Tue Dec 24 10:40:33 2019 from 10.23.100.70

# ip a l | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.10.100/24 brd 192.168.1.255 scope global eth0

Если на прокси-сервере не установлена команда nc или у вас нет учетных данных для входа на прокси-сервер, но на прокси-сервере запущена прокси-служба, такая как squid, которая будет принимать соединения SSH, вы можете использовать следующую команду.

Обратите внимание, что этот метод требует, чтобы у вас была установлена команда nc в локальной / клиентской системе.

# ssh -o "ProxyCommand nc --proxy hostname_or_IP_of_proxy:proxy_service_port --proxy-type http %h %p" user_name_on_server@hostname_or_IP_of_server

Например, чтобы войти в систему как root на 192.168.10.100 через прокси-сервис, прослушивающий порт 3128 на 10.23.100.70.

Прокси-сервис не требует никаких учетных данных.

# ssh -o "ProxyCommand nc --proxy 10.23.100.70:3128 --proxy-type http %h %p" root@192.168.10.100
root@192.168.10.100's password: 
Last login: Tue Dec 24 10:40:46 2019 from 10.23.100.70

# ip a l | grep eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast qlen 1000
    inet 192.168.10.100/24 brd 192.168.1.255 scope global eth0

Метод 2: Использование файла конфигурации клиента ssh

Мы подробно обсудили файл конфигурации клиента SSH

🐧 Как проверить конфигурацию клиента OpenSSH

🐧 Как использовать конфигурацию SSH для каждого хоста Linux

Поэтому вместо того, чтобы предоставлять все параметры в качестве входных аргументов для SSH, мы также можем использовать файл конфигурации клиента SSH.

Отредактируйте файл ~/.ssh/config, как показано ниже:
# vim ~/.ssh/config 
...
Host <nickname>
HostName <hostname_of_server>
User <user_on_server>
ProxyCommand ssh <user_on_server>@<proxy_server> nc %h %p
Если в этом файле уже есть содержимое, вам нужно будет добавить указанное выше в конец файла.
Где:
  • <nickname>: устанавливает алиас для целевого сервера.
  • <hostname_of_sever>: устанавливает реальное имя удаленного сервера/хоста
  • <user_on_server>: настоящий пользователь, который существует на целевом сервере
  • <proxy_server>: IP или имя хоста прокси-сервера
  • %h будет заменен именем хоста для подключения
  • %p будет заменен портом

Затем вы можете использовать SSH с дополнительным подробным параметром для проверки конфигурации

# ssh -vvv <target_server>

Заключение

В этом руководстве мы узнали о различных методах подключения к серверу Linux по SSH с помощью другого прокси-сервера или о передаче файлов с помощью SCP через дпрокси-сервер или джамп хост.

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

Добавить комментарий