[英]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.