Basically what sshkit-sudo gem promises, but:
- 1 hack instead of multiple layers
- obvious how to debug
- 1 global password
- does not capture the password prompt
- does not print the output when capturing
- works when not using SshKit::DSL
Hint: You might want to start with an extra “puts data” to see how your password prompt looks like.
SSHKit::Command.prepend(Module.new do
def on_stdout(channel, data)
if data.include? "[sudo] password for "
@@password ||= `echo password: 1>&2 && read -s PASSWORD && printf \"$PASSWORD\"`
channel.send_data(@@password + "\n")
else
super
end
end
end)
on servers do
capture :sudo, "ls"
end