当前位置: 首页 > 知识库问答 >
问题:

如何处理通过Scala/Java ProcessBuilder发送的SSH命令上的空白?

茅曾琪
2023-03-14

Scala ProcessBuilder使用底层的JavaProcessBuilder,它有自己的空格处理例程,可以打破SSH命令,否则这些命令将在shell上运行。我正在尝试获取解释器运行底层shell并执行shell命令的Perl反签和system()行为。Java /Scala有类似的吗?

我正在尝试这个,特别是:

ssh REMOTE_SERVER '/usr/bin/tail -n 25 /var/log/messages'

如果/usr/bin/tail是命令的正确路径,请仔细检查它。

从服务器获取最新的日志消息。它在shell上运行良好,但在没有此类文件或目录的ProcessBuilder上会崩溃。显然ProcessBuilder以某种方式引用或逃脱了该命令,并破坏了它。

提前谢谢你的建议。

共有1个答案

苗盛
2023-03-14

事实证明,我需要将整个远程命令放在Seq的最后一个参数中,并希望ProcessBuilder猜出正确的引号。

import scala.sys.process._
// .....
Seq("/usr/bin/ssh","REMOTE_HOST","/usr/bin/tail -n 25 /var/log/messages")

对它如何处理最后一个参数几乎没有控制权。不管怎样,这是有效的。如果有人知道一个更像Perl backtick或system()行为的库,我会非常感激(如果它不是100%可移植的,那没问题,它只会在Linux下运行)。谢谢

 类似资料:
  • 我正在尝试设置一个类,以便我可以通过ssh连接到远程服务器(我有IP、用户名和密码),然后发送类似“echo”test“”的命令,然后接收回输出(例如,“test”)。我用JSch来做这个,但我不知道怎么做。 我不知道该怎么办,连接后我卡住了。 非常感谢您的建议。

  • 但是现在要通过Java的JSch库来完成,怎么做呢?第一次尝试了portforwarding,但在终端上我没有这样做(没有在中设置参数)。 然后我遇到了一个问题,如何使用JSCH SSH到另一个SSH服务器后面的服务器?,但我不明白如何创建tcp隧道!

  • 我在远程服务器上设置了一个自动日志检查的设置。我创建了类似这样的方法,使用exec命令跟踪日志… 如何运行mysql命令将结果返回到eclipse终端?

  • 让我们举一个电子邮件传奇的例子:当一个用户注册时,我们创建一个发布UserRegisterEvent的用户聚合,一个传奇将被创建,这个传奇负责确保注册电子邮件被发送给用户(电子邮件可能包含验证密钥、欢迎消息等)。 我们是否应该使用: > 用try/catch->缩放吗? 使用deadline是因为我们只使用“send”,而不处理命令的最终错误,这可能是发送失败(其他服务关闭,等等) 其它的呢? 还

  • 问题内容: 在我的我确定,我可以在命令行后使用的功能: 使用此命令时,仅在远程主机上执行该命令。该命令在本地主机上执行。这是因为分号将两个不同的命令分开:命令和命令。 我尝试如下定义函数(注意单引号): 我试图将命令和命令放在一起,但是参数解析不取决于我给函数的内容。总是试图执行命令 在远程主机上。 如何正确定义,所以剧本正在改变进入目录后,在远程主机上执行,具有传递给参数的能力来? 问题答案:

  • 我想编写一个批处理文件,该文件将按给定顺序执行以下操作: 打开命令 注意:执行命令后不应关闭cmd窗口。 我试过启动命令。exe/k“cd\