为什么SSH.exec命令的序列不连续?

时间:2013-06-19 06:54:13

标签: ruby unix ssh sudo

我想做的是:

  • 以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是否有一个记住每一步的命令?

1 个答案:

答案 0 :(得分:0)

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

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

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

有关详细信息,请参阅sudo command