Назад | Перейти на главную страницу

Обратный прокси SSH / SFTP

У меня есть две машины, доступные в Интернете без использования NAT. На обеих машинах работает служба SSH.

Я хочу подключиться через SSH / SFTP к серверу A на порту 2000, и это соединение должно быть направлено на порт 22 сервера B (поведение похоже на обратный прокси-сервер HTTP, но с использованием SSH / SFTP вместо HTTP)

С iptables проблем быть не должно:

#!/bin/bash
export IP="1.2.3.4"
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables \-t nat \-A POSTROUTING \-o eth0 \-d $IP \-j MASQUERADE
iptables \-A PREROUTING \-t nat \-p tcp \--dport 2000 \-j DNAT \--to $IP:22

Что-то вроде:

ssh -o ProxyCommand="ssh -e none userA@serverA:2000 nc -w 1 serverB 22" userB@ServerB

где вы подключаетесь к serverA с ssh логином userA для открытия вперед связь с serverB с которым вы входите userB.

Пояснение:

Команда прокси открывает ssh-соединение с ServerA (с именем пользователя userA) и инициируйте двунаправленное подключение к порту 22 serverB.

Начальный ssh команда используйте это ProxyCommand установить двунаправленное соединение с ServerB где вы должны войти в систему с userB.

Короче говоря:

Существует зашифрованное соединение от портативного компьютера к серверу ServerA (шаг 1 на вашем рисунке) и

другое зашифрованное соединение от портативного компьютера к ServerB (шаг 1 + шаг 2), инкапсулированное в первое соединение в его первой части (шаг 1), чем связанное nc во второй части (шаг2).

Вместо HTTP, As SSH является двунаправленным, когда соединение открыто, все запросы и ответы следуют за одним и тем же соединением. Так что не нужно думать о шагах 3 и 4.

Вы можете использовать порт ssh для архивации этого

ssh -L localportinmypc:hostname_of_the_behind_the_firewall:remoteport hostname_of_my_firewall

Теперь после этого:

sftp -o Port=localportinmyp localhost or ssh -p localportinmyp