0

リモートシステムにログインしてハードウェア情報を取得する必要がある状況があります。私は彼らのシステムにログインしました。これには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

4

2 に答える 2

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.
于 2013-12-12T20:47:21.167 に答える