【问题标题】:Why are the sequence of SSH.exec commands not continuous?为什么 SSH.exec 命令的顺序不连续?
【发布时间】:2013-06-15 14:25:22
【问题描述】:

我想做的是:

  • 以 root 身份登录
  • su postgres
  • psql jumlar < database_schema.txt

这是我的代码。如您所见,我必须一步一步地做这些,我不能在一个命令中完成这两个步骤:

Net::SSH.start(192.168.2.1, root, :password => "root") do |ssh|
  ssh.exec! "su postgres"
  ssh.exec! "psql jumlar < database_schema.txt"

但是,这在 su postgres 之后不起作用,因为第二个 ssh.exec 在第一个之后不会做任何事情。它似乎总是打开一个新的隧道。

不知道Ruby有没有记住每一步的命令?

【问题讨论】:

  • 为什么不在一个字符串中做呢? ssh.exec! "su postgres; psql jumlar &lt; database_schema.txt"
  • 命令可以连续到一个点。更多地查看susudo 文档,尤其是sucommandargs 参数sudo

标签: ruby unix ssh sudo


【解决方案1】:

su 命令打开一个新的 shell。在第一个命令完成之前,第二个命令不会运行,但在您退出并终止新 shell 之前,第一个命令不会“完成”(然后您将不再处于 postgres 用户的上下文中)。

一种解决方案是使用以下命令作为 postgres 运行所需的命令:

  ssh.exec! "sudo -u postgres 'psql jumlar < database_schema.txt'"

请参阅sudo command 了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2021-03-26
    • 2019-04-02
    • 2015-02-14
    • 2016-11-27
    相关资源
    最近更新 更多