У меня есть три машины
Source Machine
Destination Machine - IP 10.20.30.40
Intermediate Machine - Host server1.test.com
Исходный компьютер имеет доступ по SSH к промежуточному компьютеру, а промежуточный компьютер имеет доступ по SSH к целевому компьютеру, но не имеет прямого доступа от источника к месту назначения.
На источнике запущен скрипт, которому нужен SSH для назначения. В скрипте настроен IP-адрес места назначения, и я не могу изменить его на имя хоста или localhost (тогда я мог бы использовать SSH-порт для перенаправления с помощью промежуточного сервера)
Я проверил несколько статей, и везде предлагалось использовать iptables для перенаправления IP в другое место назначения.
Поэтому я решил использовать iptables в источнике для перенаправления IP-адреса назначения на localhost на порт 1234, используя это:
iptables -t nat -A PREROUTING -p tcp -d 10.20.30.40 --dport 22 -j DNAT --to 127.0.0.1:1234
а затем перенаправить локальный порт 1234 через промежуточный компьютер в пункт назначения следующим образом:
ssh server1.test.com -L 1234:10.20.30.40:22
Это хороший способ сделать это или есть какое-нибудь простое решение?
Остерегайтесь: прочтите это, только если у вас есть root-доступ как к исходным, так и к промежуточным машинам.
Поскольку вы говорите, что исходная машина (назовем ее A) не имеет возможности связаться с целевой машиной (называемой C), я предполагаю, что существуют ограничения маршрутизации или разрешений, которые предотвращают это. Ограничения, которых может избежать промежуточный продукт (машина B). Вы можете заставить исходный компьютер использовать последний в качестве шлюза для достижения пункта назначения. Поскольку я считаю, что A и B не находятся в одной сети, вы можете создать ssh vpn между A и B (IP tun0: 10.0.0.1, IP tun0 B: 10.0.0.2 оба замаскированы 255.255.255.252 в режиме p2p) и выдать
# ip route add 10.20.30.40/32 via 10.0.0.2 dev tun0
на A. С другой стороны, на B:
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -s 10.0.0.1 -d 10.20.30.40/32 -j MASQUERADE
Я не буду вдаваться в подробности о том, как запустить ssh vpn, поскольку это не относится к вашему вопросу. Проверьте https://help.ubuntu.com/community/SSH_VPN если вы думаете, что это может вам помочь.
Либо используйте для этого VPN-соединения (все машины, подключенные через частную сеть), что более безопасно, либо переадресацию портов (что неплохая идея), просто не забудьте ограничить пул IP-соединений на машине в частной сети.
Правила iptables-DNAT будут заменены следующими настройками.
(Script execution user's .ssh/config)
Host 10.20.30.40
Hostname 127.0.0.1
Port 1234
Если ssh-portforward работает с тем же пользователем, я думаю, что лучше использовать ProxyCommand
.
Host 10.20.30.40
ProxyCommand ssh server1.test.com nc %h %p