Tôi đang cố gắng tìm hiểu làm thế nào để một chuỗi gửi nhiều lệnh net-ssh sau một sudo su - #{su_user}
trong Ruby.Làm thế nào để net-ssh sudo su trong Ruby
Mã hiện tại của tôi ở bên dưới và bị treo bằng lệnh sudo su
, ngay cả sau send_data "#{password}\n"
.
Trong khi đó, trên hệ thống, việc thực hiện thủ công sudo su - admin2
không yêu cầu nhập mật khẩu.
Mọi trợ giúp sẽ được đánh giá cao!
require 'rubygems'
require 'net/ssh'
host = 'hostA'
user = 'admin'
password = 'hostA_pwd'
su_user = 'Admin2'
Net::SSH.start(host, user, :password => password) do |ssh|
ssh.open_channel do |channel|
channel.request_pty do |c, success|
raise "could not request pty" unless success
channel.exec "pwd; whoami; sudo su - #{su_user} ; pwd ; whoami"
channel.on_data do |c_, data|
if data =~ /\[sudo\]/ || data =~ /Password/i
channel.send_data "#{password}\n"
else
result << data
end
end
puts result
end
end
ssh.loop
end
Bạn đang nhớ rằng bạn không thể lệnh chuỗi như thế sau khi 'lệnh sudo'? 'Pwd cuối cùng; whoami' sẽ không được thực thi cho đến sau khi sudo command shell trả về. Bạn có tính đến điều này? – Casper