双跳SSH到服务器时杀死远程进程


1

我正在做一个双跳SSH,首先进入一个具有公共IP地址和开放SSH端口的服务器,然后SSH连接到下一台计算机,同时将我的本地VNC端口链接到远程系统端口。在图中:

[我的本地系统] --- SSH隧道(端口5900转发) - > [服务器] - SSH隧道(端口5900转发) - > [远程系统]

我创建了一个单独的字符串命令来完成所有这些,但是有一个问题。x11VNC似乎崩溃了过多的数量。就像字面上我可能会在我的系统再次冻结之前完成10分钟的工作,我必须重新启动x11vnc。但这不是这个问题的意思。

我使用的命令如下:

ssh -L 5900:[REMOTE SYSTEM IP]:5900 user@FQDN.SERVER.NET 'ssh [REMOTE SYSTEM IP] 'pkill x11vnc; x11vnc --ncache 10''

现在我已经在这里包含了PKILL命令,因此它将清除仍在运行的冻结的x11vnc实例,这样我就可以释放端口5900(并且没有渗透我的系统的僵尸进程):但是这不起作用。无论我做什么,如果它是双跳,这只是返回x11vnc,命令未找到

注意:如果我删除pkill,此命令字符串可以正常工作。但我需要杀死僵尸

如果从服务器,我尝试运行命令:

ssh [REMOTE SYSTEM IP] 'pkill x11vnc; x11vnc --ncache 10' 

这很好用!有谁知道为什么这在做“双跳”ssh连接时不起作用?

Answers:


1

从您的示例中,看起来您在另一组单引号中嵌套了一组单引号。您将需要“逃避”内部引号集和分号,如下所示:

ssh -L 5900:[REMOTE SYSTEM IP]:5900 user@FQDN.SERVER.NET 'ssh [REMOTE SYSTEM IP] \'pkill x11vnc\; x11vnc --ncache 10\''

或者,您可以在运行x11vnc的系统上创建一个小批处理文件。该脚本为您执行kill then x11vnc,然后您只需将脚本作为最终命令运行。


真实的故事,我只是希望能找到解决办法的方法。这只会导致各种各样的小脚本无处不在。我想我可以将x11vnc执行脚本重写为x11vnc-single,它首先执行任何正在运行的实例的pkill。无论哪种方式,谢谢你的帮助和见解。
dynamphorous

我确实试图逃避内部引号,但发现它只是在搜索匹配的'''时踢回了意想不到的EOF。那是出乎意料的。
dynamphorous

您可以尝试对这两个命令使用不同的引号。使用“”作为外部的,然后使用“”作为内部的。你可能需要逃避“;” 在pkill和x11vnc之间。
dan_linder

你是对的。但还有一件事,它需要使用反引号(重音符号)而不是内部标记的单引号。我也会在允许的情况下发布答案(由于我的声誉,我会再花3个小时)再次感谢
dynamphorous

0

我终于能够解决问题了。事实证明,我需要使用`而不是'来代表内部''。(反引号(严重重音)而不是单引号)

所以最后的工作命令是:

ssh -L 5900:[REMOTE SYSTEM IP]:5900 user@FQDN.SERVER.NET 'ssh [REMOTE SYSTEM IP \`pkill x11vnc\; x11vnc --ncache 10\`'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.