0

我有一台服务器正在将连接转发到一组其他服务器。

在这里,我将所有传入连接转发到:

my.tunnel.com:33199 到 my.server2.com:52222

和..

my.tunnel.com:33200 到 my.server3.com:52222

.. 直到

my.tunnel.com:XXXXX 到 my.serverN.com:52222

除了隧道 my.tunnel.com,我在每台服务器上通过以下命令启动此操作:

ssh -o StrictHostKeyChecking=no -l root -i /etc/ssh/id_rsa -R *:33199:127.0.0.1:22 -p 443 my.tunnel.com 0 33199

...

ssh -o StrictHostKeyChecking=no -l root -i /etc/ssh/id_rsa -R *:XXXXX:127.0.0.1:22 -p 443 my.tunnel.com 0 XXXXX

好吧,这很好用!

但!

在启动每个命令时,我想在 my.tunnel.com 上检查 my.server2.com 希望 my.tunnel.com 完全从端口 33199 转发,而不是另一个端口!所以此时我想得到这个端口号。

如果问题还不够清楚,请告诉我。

谢谢!

4

1 回答 1

1

获取转发端口

环境变量中没有这样的信息,所以必须自己传递:

ssh -R 33199:127.0.0.1:22 my.tunnel.com "export MY_FWD_PORT=33199; my_command"

(my_command 是您要在服务器上运行的脚本)。有关传递变量的更多信息 - https://superuser.com/q/163167/93604

获取源端口

查看man ssh(1)SSH_CONNECTION中的环境变量。它的含义是:

source_ip source_port dest_ip dest_port

您可能想要source_port,所以只需获取它的第二部分:

echo $SSH_CONNECTION | awk '{ print $2 }'

或者

echo $SSH_CONNECTION | cut -d" " -f 2
于 2013-12-03T17:02:16.637 回答