2011-12-01 127 views
0

我有一个Rake任务停止远程MySQL服务器类似以下内容:SSH连接到远程数据库服务器

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连接。

回答

1

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

尝试

system 'ssh [email protected] sudo /etc/init.d/mysql stop' 

(这可能需要一些转义第二ARG)

+0

ssh命令需要引用。在shell中它看起来像:ssh user @ host'sudo /etc/init.d/mysql stop'。 – pduey

+0

我也没有。这就是为什么我明确告诉它可能需要转义而不是发布不正确的转义。 –

1

它包装成一个简单的功能,它是非常方便:

def run(cmd) 
    system "ssh [email protected] '#{cmd}' " 
end 

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

呼应的东西放到一个文件test.txt 远程运行ls cat是远程文件。

为您的使用情况 运行(“须藤/etc/init.d/mysql停止”)

有一个身份文件和的.ssh/config安装程序,它不要求输入密码...