SSH连接到远程数据库服务器

时间:2011-12-01 11:14:26

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1

我有 Rake任务来停止远程MySQL服务器,如下所示:

   task :stop_mysql do

     #SSH connect to the remote db server first
     #how???

     #then, run the following command
     system 'sudo /etc/init.d/mysql stop'
   end

如上所示,现在数据库服务器远程,我知道数据库服务器的 IP 地址。

如何以编程方式将 ssh 连接到数据库服务器并在上面的rake任务中运行命令来停止MySQL?

P.S。 ssh配置已经完成(我的意思是密钥)。不需要担心SSH配置。我只需要知道ruby代码应该如何建立SSH连接。

2 个答案:

答案 0 :(得分:1)

ssh可以执行单个命令,而不是打开一个新shell。这样,您可以使用system在远程主机上执行命令。

尝试

system 'ssh user@host sudo /etc/init.d/mysql stop'

(可能需要为第二个arg进行一些转义)

答案 1 :(得分:1)

将它包装成一个简单的函数,它非常方便:

def run( cmd )
  system "ssh user@host '#{cmd}' "
end

run( 'echo "aha coolness" >> test.txt' )
run( 'ls *.txt' )
run( 'cat test.txt' )

回显一个文件test.txt 远程运行ls cat是远程文件。

对于您的用例     run('sudo /etc/init.d/mysql stop')

拥有身份文件和.ssh / config设置,并且不需要输入密码......