ruby - Sudo 通过 net::ssh 在 ruby​​ 中

标签 ruby linux ssh sudo

这是我目前向远程服务器发送命令的方式:

Net::SSH.start("1.2.3.4", keys: ["~/.ssh/id_rsa.pub"]) do |ssh|
  ssh.exec!(cmd_item)
end

我将如何执行需要 root 的命令,例如“sudo apt-get install”,每次都要输入密码?

最佳答案

您需要知道远程机器的根密码。如果这是已知的,其余的应该可以通过这种方式实现:

Net::SSH.start("1.2.3.4", keys: ["~/.ssh/id_rsa.pub"]) do |ssh|
   if not cmd_item["sudo "].nil? # if cmd_item string requires sudo access
       # sudo yourcommand  =>  echo -e "RemoteRootPassword\n" | sudo -S yourcommand
       cmd_item = "echo -e \"RemoteRootPassword\n\" | " + cmd_item.gsub(/sudo/, "sudo -S")
       ssh.exec!(cmd_item)
   else
       ssh.exec!(cmd_item)
   end
end

一些引用,你可以查看this关于如何使用带有密码作为参数的 sudo 的问题。

希望对您有所帮助:)

关于ruby - Sudo 通过 net::ssh 在 ruby​​ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38066663/

相关文章:

Ruby 通过字符串解析

python - 'DisabledBackend' 对象没有属性 '_get_task_meta_for'

mongodb - 确保云中 MongoDB 传输的安全

ruby-on-rails - 无方法错误 : undefined method `from_json' for "{}":String

ruby - 将字符串数组转换为整数数组

ruby-on-rails - Rails 控制台找不到 Rake,但 Bundler 安装了它

php - CAS服务器登录

linux - 尝试执行给定命令,这是在 Linux 上的 Kaa 开发平台上使用 ESP8266 设备的步骤之一

deployment - Fabric 需要很长时间才能使用 ssh

git - 在 Windows 7 上安装适用于 Git 的 SSH