这是我目前向远程服务器发送命令的方式:
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/