2011-12-01 128 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安裝程序,它不要求輸入密碼...

相關問題