我有 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连接。
答案 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设置,并且不需要输入密码......