2013-12-12 22 views
0

我有一種情況,因爲我必須登錄到遠程系統並獲取它們的硬件信息。 我登錄到他們的系統我已經使用ssh爲此我使用net-ssh gem。 這裏是我的代碼,我登錄和查看信息在ruby中使用net :: ssh使用sudo命令獲取遠程系統的信息

Net::SSH.start('host','user', :password => 'xxxxxx') do |ssh| 
    ssh.exec!("echo 'xxxxxx' | sudo -S dmidecode -s system-serial-number") 
end 

爲得到我已經使用sudo -S dmidecode -s system-serial-number命令 它是作爲密碼用戶1.0.0給人以密碼輸出爲用戶信息 我如何刪除該消息?

我提到這個link但我也實現了它,但它會花費很多時間來加載他們是如何做到這一點的他們的任何其他方式?

result = nil 
    session.exec!("sudo -S dmidecode -s system-serial-number") do |channel, stream, data| 
    if data =~ /^\[sudo\] password for user:/ 
     channel.send_data 'your_sudo_password' 
    else 
     result << data 
    end 
    result 

d

回答

0

須藤故意試圖防止這種以提高安全性。理想的解決方案是在sudoers文件中添加一個NOPASSWD選項,以獲取您需要的命令,以及用於創建ssh連接的用戶名。 例如: THESSHUSER ALL = NOPASSWD:dmidecode,系統序列號

但是,請替換具有完全絕對路徑的命令。另外,不要只爲所有命令提供ssh用戶NOPASSWD,將其限制爲要運行的命令,否則會降低系統的安全性。 sudoers文件通常位於/ etc/sudoers中,並在許多機器上用特殊命令編輯,該命令爲visudo,必須以root身份運行(即使用sudo;)。一旦你編輯了sudoers文件,你可以在不提示輸入密碼的情況下運行這些命令。

+0

感謝快速反應。但他們是數百個系統,我們必須登錄並獲取他們的系統信息。我無法更改他們的文件。 – r15

0

不能完全確定是什麼問題,但也許你想嘗試使用-p切換到密碼提示更改爲空字符串:

ssh.exec!("echo 'xxxxxx' | sudo -p '' -S dmidecode -s system-serial-number") 
-p The -p (prompt) option allows you to override the default password 
    prompt and use a custom one.