我有一个别名,它启动一个ssh
带有端口转发的自定义命令,如下所示:
ssh -Y -L 8888:localhost:8888 hostname
这当然适用于我为同一主机启动的第一个会话,但在随后的时间转发将失败,因为端口 8888 已经在使用中。
我想做的是想出一种方法,每次我开始ssh
连接到同一台服务器时,端口都会自动调整,以便每个不同ssh
的连接都有自己单独的端口可以转发到。
因此,例如,我第一次发出命令时,它相当于
ssh -Y -L 8888:localhost:8888 hostname
第二次相当于
ssh -Y -L 8889:localhost:8889 hostname
等等。
我知道我可以使用 Python 或其他方式做到这一点,但我想知道是否有比编写自己的(可能有点复杂)脚本更简单的解决方案来做到这一点。那可能吗?
PS.:我知道我可以很容易地手动执行此操作,但是我每天启动其中几个,这不仅需要我输入更多的东西,而且还需要跟踪哪些端口已经在使用以及哪些端口已经在使用中不是。
这是一个简短的脚本,可以完成您所描述的事情。它通过尝试锁定以端口号命名的文件来工作,如果失败,则增加端口号并重试。
端口锁定文件在
$HOME/.ssh/ports
. 它们在创建后不会被清理,但这没关系;我们不检查是否存在;我们正在获取文件锁。这个脚本不关心你是每次连接到同一个服务器还是连接到不同的服务器;每个连接都将获得一个唯一的端口。
如果我将此脚本保存在一个名为的文件中
portfw.sh
并运行它三次,如下所示:我将在输出中看到以下过程
ps
: