【发布时间】:2019-11-22 13:49:17
【问题描述】:
如何在 Ruby 上进行 SSH 动态端口转发?
我尝试使用诸如“net/ssh/socks”和“net/ssh/gateway”之类的 gem,但看起来它们已经过时了,因为我什至不需要它们。
我需要做的就是运行这个 shell 命令
ssh -D 5555 user@host -f -N
并接收该进程的PID。
我也尝试使用Kernel#system 和Kernel#spawn。
例如:
pid = spawn("ssh -D 5555 user@host -f -N")
Process.wait pid
这对我来说很好,但是返回的 PID 总是比启动的进程的实际 PID 少 3 个单位。例如返回的PID为1555,真实的PID为1558。
另一个问题:为什么 PID 的差异总是 3,是否还有其他差异?我可以可靠地使用pid + 3 吗?
【问题讨论】:
-
如何确定“真实PID”?我无法重现此 PID 问题,因为 SSH 在运行时不应分叉。如果你这样做
pid = spawn "sleep 300"会发生什么?那你得到正确的PID了吗?另外:你如何检查正确的 PID,你正在运行什么命令。最好将此信息添加到问题中。
标签: ruby linux ssh proxy socks