反向 SSH 隧道:如何将我的端口号发送到服务器?

Tom*_*Tom 12 ssh ssh-tunnel

我有两台机器,客户端和服务器。

客户端(位于公司防火墙后面)使用以下命令打开一个到服务器的反向 SSH 隧道,服务器具有可公开访问的 IP 地址:

ssh -nNT -R0:localhost:2222 insecure@server.example.com

在 OpenSSH 5.3+ 中,紧随0其后的-R意思是“选择一个可用端口”,而不是明确调用一个。我这样做的原因是因为我不想选择一个已经在使用的端口。事实上,实际上有很多客户端需要建立类似的隧道。

此时的问题是服务器不知道哪个客户端是哪个。如果我们想连接回这些客户端之一(通过本地主机),那么我们如何知道哪个端口指的是哪个客户端?

我知道以上述方式使用时,ssh 会将端口号报告给命令行。但是,我也想使用 autossh 来保持会话的活动。autossh 大概通过 fork/exec 运行其子进程,因此实际 ssh 命令的输出在以太中丢失。

此外,我想不出任何其他方式从客户端获取远程端口。因此,我想知道是否有办法确定服务器上的此端口。

我的一个想法是以某种方式使用 /etc/sshrc,它应该是一个为每个连接运行的脚本。但是,我不知道如何在这里获得相关信息(也许是处理该连接的特定 sshd 进程的 PID?)我希望得到一些指针。

谢谢!

Ben*_*ani 3

VPN不是更合适吗?OpenVPN 的配置超级简单。以下是示例配置和一些链接,可指导您完成证书创建过程:

apt-get install openvpn
mkdir /etc/openvpn/easy-rsa
mkdir -p /etc/openvpn/ccd/client_server
touch /etc/openvpn/ipp.txt
cp -a /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
source ./vars
./clean-all
./build-ca 
./build-dh
./build-key-server server
cd /etc/openvpn/easy-rsa/keys
openssl pkcs12 -export -out server.p12 -inkey server.key -in server.crt -certfile ca.crt
Run Code Online (Sandbox Code Playgroud)

然后创建一个新文件/etc/openvpn/client_server.conf并将以下内容放入其中,SERVER_IP_ADDRESS根据需要更改

local SERVER_IP_ADDRESS
port 8443
proto udp
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
pkcs12 /etc/openvpn/easy-rsa/keys/server.p12
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
ifconfig-pool-persist /etc/openvpn/ipp.txt
server 192.168.100.0 255.255.255.0
client-config-dir /etc/openvpn/ccd/client_server
ccd-exclusive
keepalive 10 120
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
verb 3
reneg-sec 0
Run Code Online (Sandbox Code Playgroud)

然后为每个要连接的用户构建一个密钥,并在 ccd 目录中创建配置文件

./build-key-pkcs12 user1@domain.com
echo "ifconfig-push 192.168.100.2 255.255.255.0" > /etc/openvpn/ccd/client_server/user1@domain.com
Run Code Online (Sandbox Code Playgroud)

IP 地址必须适合 /30 子网(请参阅http://www.subnet-calculator.com/cidr.php),因为每个连接只有 2 个可用地址(服务器和客户端)。因此,您的下一个可用客户端 IP 将是 192.168.100.6 等等。

现在每个连接用户都拥有静态 IP。

the user1@domain.com.p12然后向最终用户提供文件并使用以下配置文件

client
dev tun
proto udp
remote SERVER_IP_ADDRESS 8443
pkcs12 user1@domain.com.p12
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
reneg-sec 0
Run Code Online (Sandbox Code Playgroud)