Для разових або будь-яких випадкових ситуацій підхід ProxyCommand легко є дуже зручним.
З іншого боку, якщо вам потрібно декілька одночасних з'єднань або коли вам, можливо, вам потрібно часто використовувати цю команду для щоденної роботи, ви можете також замість цього встановити на сервері правило перекладу мережевих адрес (NAT).
Для цього потрібен суперпопулярний (зазвичай root
) доступ на вашому сервері, щоб спочатку застосувати одне єдине правило NAT. Зауважте, що можливо, взагалі не буде дозволено (або ефективно) застосовувати правило NAT, навіть якщо у вас є суперпользовательский доступ, якщо ваш "сервер" насправді є контейнером (як Docker) замість машини.
Якщо говорити про типову систему Linux з iptables
набором, то правило NAT, яке застосовується на сервері1 для вашого зразка, може виглядати так:
iptables -t nat -I POSTROUTING -d <server2-ip-address> -p tcp --dport <server2-port> -j SNAT --to :33101-33109
Ця команда інструктує ядро Linux , щоб зробити якесь - або з'єднання в напрямку порту server2-порту в server2-IP-адреса , щоб вийти , використовуючи порт джерела , обраний в діапазоні 33101-33109 , який доступний в даний момент.
Як тільки це правило діє, ви підключаєтесь до свого сервера2 просто за допомогою свого звичного:
ssh username@server2 -p remote_port
і ви можете використовувати цю ж ssh
команду одночасно стільки разів, скільки вам потрібно, доки є доступні порти в діапазоні, визначеному в правилі NAT.
Зауважте, однак, що netstat
(або еквівалентна команда), запущена на вашому сервері, повідомляє про локальну адресу з'єднання як про немодифікований , випадково вибраний номер вихідного порту, навіть незважаючи на те, що фактичний трафік, який постачається на ваш сервер2, містить модифікований номер вихідного порту.
Щоб скасувати правило NAT, команда така ж, за винятком -D
параметра замість -I
.
Якщо автоматичне застосування NAT застосовується під час завантаження, залежить від того, який дистрибутив Linux у вас є на вашому сервері та від того, чи має він вже встановлену брандмауер чи ні.
Я не маю досвіду роботи з BSD-подібними системами, але я вірю, що існує еквівалент.