我需要建立一个任意远程转发端口,以便在连接到服务器时将端口转发到特定的本地端口。我没有服务器的管理员权限,而服务器是大量用户使用的重要计算资源。我无法选择静态远程端口号,因为我没有理由期望它始终可用。
我使用类似这样的命令ssh -R 0:localhost:8001 servername
——使用 0 作为端口号,这样远程服务器就可以为我选择一个端口。这很有效;客户端告诉我分配的端口号,然后我可以使用它手动连接回我的机器(或我网络上的另一台机器)。
问题是我需要编写一些脚本供其他人在远程系统上使用,并且我需要一种方法来确定远程端该会话的端口号。我查看了会话中的 SSH_* 环境变量,但它们都无济于事。我尝试查看输出,ss -le | grep "uid:$UID"
它确实找到了端口,但它似乎有点复杂,而且不一定总是有效,特别是如果用户恰好在不同的登录会话中运行其他进程。
是否有一种明确的、不太混乱的方法来查找动态分配的远程转发端口号?
编辑:我刚刚发现这是这篇早期文章,其中的问题用词略有不同,但内容完全相同。不幸的是,我无法使用涉及服务器上的 root 或 sudo 的解决方案。
我知道我想要做的事情可能无法以可靠的方式实现——这使得这个自动端口选择功能变得没那么有用。