【问题标题】:get the information from the remote system using sudo command by using net::ssh in ruby在 ruby​​ 中使用 net::ssh 使用 sudo 命令从远程系统获取信息
【发布时间】:2013-12-13 04:47:21
【问题描述】:

我有一种情况,我必须登录到远程系统并获取他们的硬件信息。 我登录到他们的系统,为此我使用了 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命令的信息 它使用 password for user 作为 password for user 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

【问题讨论】:

    标签: ruby-on-rails ruby net-ssh


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的快速响应。但他们有数百个系统,我们必须登录并获取他们的系统信息。我无法更改他们的文件。
    【解决方案2】:

    不完全确定问题出在哪里,但也许您想尝试使用-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.
    

    【讨论】:

      猜你喜欢
      • 2019-03-19
      • 1970-01-01
      • 2022-06-06
      • 2012-12-01
      • 1970-01-01
      • 2017-10-16
      • 1970-01-01
      • 2013-04-04
      相关资源
      最近更新 更多