Существует server
с общедоступным IP-адресом и несколькими клиентами из-за NAT, подключенный к server
через openvpn
с параметром ifconfig-pool-persist ipp.txt
в /etc/openvpn/server.conf
.
Все участники сети openvpn
(172.16.0.0/16
) имеют пользователя sudo- user
. Открытый ключ моей локальной машины добавляется в ~root/.ssh/authorized_keys
и ~user/.ssh/authorized_keys
на server
и всех клиентов. Таким образом, используя server
качестве хоста перехода к сети 172.16.0.0/16
я могу легко подключиться к любому из участников сети по IP с помощью переадресации ключей (ForwardAgent yes
).
Выпуская пары сертификат / ключ для клиентов openvpn
я присвоил им значимые имена (в них CommonName ). Я хотел бы использовать их в качестве имен хостов, передаваемых в ssh
для подключения. Для достижения желаемого я сделал следующее:
~user/.ssh/config
:
Host *
IdentityFile ~/.ssh/id_rsa.user
IdentityFile ~/.ssh/id_rsa.root
ForwardAgent yes
Compression yes
Host server rserver
HostName 1.1.1.1
Host client* rclient* 172.16.*
ProxyCommand ~/.ssh/get_client_ip.bash %h %p
Host client* server
User user
Host rclient* rserver
User root
Host 192.168.1.*
Compression no
~user/.ssh/get_client_ip.bash
(chmod +x
-ed):
#! /usr/bin/env bash
ssh -T -W $( ssh rserver "awk -F '[.,]' -v OFS='.' '/^"$1",/ { print \$2, \$3, \$4, (\$5 + 2) }' /etc/openvpn/ipp.txt" ):$2 server
Если я просто ssh -o ProxyCommand="ssh -T -W 172.16.0.4:22 server" 172.16.0.4
(здесь последний 172.16.0.4
(IP-адрес client1
) действительно не имеет никакого значения), то соединение установлено правильно.
Если я ssh client1
, то получаю ошибку:
Длина плохого пакета 1349676916.
ssh_dispatch_run_fatal: соединение с НЕИЗВЕСТНЫМ портом 0: неверный код аутентификации сообщения
Я проверил, что последний точно эквивалентен предыдущему.
Также простой вызов bash ~/.ssh/get_client_ip.bash client1 22
устанавливает соединение с client1
.
Как бороться с прокси-командой, вложенной в скрипт bash? Должен ли я сделать что-то дополнительное, чтобы перенаправить стандартные потоки ввода и вывода изнутри скрипта bash, предоставленного ProxyCommand
?
Кажется, есть разница между командой выполнения в середине канала, прямо или косвенно как часть сценария bash.