У меня есть две машины, клиент и сервер.
Клиент (который находится за корпоративным брандмауэром) открывает обратный туннель SSH к серверу, который имеет общедоступный IP-адрес, с помощью этой команды:
ssh -nNT -R0: localhost: 2222 insecure@server.example.com
В OpenSSH 5.3+, 0
возникновение сразу после -R
средства означает «выбрать доступный порт», а не явно вызывать его. Я делаю это потому, что не хочу выбирать порт, который уже используется. По правде говоря, на самом деле существует много Клиентов, которым необходимо установить похожие туннели.
Проблема в том, что сервер не знает, какой клиент какой. Если мы хотим подключиться к одному из этих клиентов (через локальный хост), то как мы узнаем, какой порт относится к какому клиенту?
Мне известно, что ssh сообщает номер порта в командную строку при использовании вышеуказанным способом. Тем не менее, я также хотел бы использовать autossh, чтобы сохранить сессии. Предположительно, autossh запускает свой дочерний процесс через fork / exec, так что вывод действительной команды ssh теряется в эфире.
Кроме того, я не могу придумать другой способ получить удаленный порт от Клиента. Таким образом, мне интересно, если есть способ определить этот порт на сервере.
У меня есть идея как-то использовать / etc / sshrc, который предположительно является скриптом, который запускается для каждого соединения. Тем не менее, я не знаю, как можно получить соответствующую информацию здесь (возможно, PID конкретного процесса sshd, обрабатывающего это соединение?) Я хотел бы некоторые указатели.
Благодарность!
источник
Ответы:
Разве VPN не будет более подходящим? OpenVPN очень прост в настройке. Вот пример конфигурации и некоторые ссылки, которые помогут вам в процессе создания сертификата:
Затем создайте новый файл
/etc/openvpn/client_server.conf
и вставьте в него следующее, изменивSERVER_IP_ADDRESS
соответствующим образомЗатем создайте ключ для пользователя, который будет подключаться, и создайте файл конфигурации в директории ccd.
IP-адрес ДОЛЖЕН быть подходящим для подсети / 30 (см. Http://www.subnet-calculator.com/cidr.php ), поскольку для каждого соединения доступно только 2 адреса (сервер и клиент). Таким образом, ваш следующий доступный IP-адрес клиента будет 192.168.100.6 и так далее.
Тогда у вас теперь есть статические IP-адреса для каждого подключающегося пользователя.
Затем предоставьте
the user1@domain.com.p12
файл конечному пользователю и используйте следующий файл конфигурацииисточник
ifconfig-push 192.168.100.2 192.168.100.3
- Я понятия не имею, почему это отличается на платформах. И да, это означает, что 4 IP-адреса используются для каждого клиента (расточительно, но характер зверя).Если у каждого клиента разные имена пользователей, вы можете использовать,
netstat
чтобы узнать, какой портsshd
прослушивает процесс этого пользователя . Например:источник
Вы можете изменить временной диапазон портов (
/proc/sys/net/ipv4/ip_local_port_range
для Linux), а затем использовать статически распределенные порты за пределами этого диапазона.источник
echo $[61002+RANDOM%4532]
чтобы выбрать номер порта в этом диапазоне.Я хочу такую же настройку, как и вы, я увеличил уровень журнала SSH-сервера до DEBUG, и он показал в журналах, какой локальный порт был у клиента
например:
команда клиента:
ssh -N -R0:127.0.0.1:5522 connector@example.com
журнал сервера:
там вы видите номер порта
источник
Вы должны быть в состоянии извлечь соответствующую информацию из вывода:
Запустите как root.
источник
Запустите этот скрипт на сервере:
Вы можете или не можете нуждаться в двух sudo. Удалить, если вы этого не сделаете.
PS - Это модифицированная версия решения, которое я нашел в другом месте некоторое время назад. Я думаю, что это может быть из StackOverflow, но я не могу найти исходную ссылку.
источник