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

sudo 故意试图阻止这种情况以提高安全性。理想的解决方案是在 sudoers 文件中为您需要的命令添加一个 NOPASSWD 选项到用于创建 ssh 连接的用户名。例如:THESSHUSER ALL = NOPASSWD:dmidecode,系统序列号

但是,用它们的完整绝对路径替换命令。此外,不要只为所有命令提供 ssh 用户 NOPASSWD,将其限制为您要运行的命令,否则会降低系统的安全性。sudoers 文件通常位于 /etc/sudoers 中,并且在许多机器上使用特殊命令进行编辑,该命令是 visudo,您必须以 root 身份运行(即使用 sudo ;)。编辑 sudoers 文件后,您可以运行这些命令而不会提示您输入密码。

于 2013-12-12T17:53:45.737 回答
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 回答