请告诉我,在Ruby上运行SSH动态端口转发的方式是什么?
我曾尝试使用诸如“ net / ssh / socks”和“ net / ssh / gateway”之类的宝石,但由于我什至不需要它们,它们似乎已经过时了。
我要做的就是运行此shell命令ssh -N -D 5555 user@host
并接收此过程的PID。
我也尝试使用Kernel#system
和Kernel#spawn
。
示例:
pid = spawn("ssh -N -D 5555 user@host")
Process.wait pid
这对我来说很好,但是有一个问题,PID总是比开始的进程的实际PID少3个单位返回。 F.e.倒数PID为1555,实际PID为1558。
所以这是另一个问题,为什么PID的差异始终为3,并且还会有另一个差异吗?我可以可靠地使用pid + 3
吗?
如果您在没有-N
的情况下生成,则可能会失去对自己终端的控制权,因为SSH会尝试运行远程Shell会话并将该会话的stdin / out连接到终端。
我无法重现PID问题(并且我认为它与缺少-N
有关,但这应该是您想要的,并且可能还会解决您的PID问题:
pid = spawn("ssh -N -D 5555 user@host")
-N不要执行远程命令。这对于仅转发端口很有用。