簡體   English   中英

通過在Ruby中使用net :: ssh使用sudo命令從遠程系統獲取信息

[英]get the information from the remote system using sudo command by using net::ssh in ruby

我有一種情況,因為我必須登錄到遠程系統並獲取其硬件信息。 我登錄到他們的系統,為此我已經使用ssh了,而我正在使用net-ssh gem。 這是我登錄並獲取信息的代碼

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的密碼,我如何刪除該消息?

我已經引用了此鏈接,但我也實現了該鏈接,但是加載將花費很多時間,他們的其他方法是怎么做到的呢?

    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

sudo故意嘗試阻止這種情況以提高安全性。 理想的解決方案是將sudoers文件中的NOPASSWD選項(用於所需命令)添加到用於創建ssh連接的用戶名。 例如:THESSHUSER ALL = NOPASSWD:dmidecode,系統序列號

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

不能完全確定問題是什么,但是也許您想嘗試使用-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. 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM