Если у вас есть права администратора на удаленном сервере, я бы настроить sudoers, чтобы позволить пользователю вы используете для SSH запустить беспарольную Судо. Вы можете быть в курсе тех команд, которые вы хотите разрешить без пароля. С точки зрения безопасности ваш ssh-ключ должен обеспечивать более высокий уровень аутентификации, чем пароль.
Если вы не управлять сервером, и было бы хлопоты попросить администратор, чтобы позволить вам Суд без пароля, Net::SSH documentation дает аккуратный пример того, как вы можете ответить на запрос пароля:
Net::SSH.start("host", "user") do |ssh|
ssh.exec! "cp /some/file /another/location"
hostname = ssh.exec!("hostname")
ssh.open_channel do |ch|
ch.exec "sudo -p 'sudo password: ' ls" do |ch, success|
abort "could not execute sudo ls" unless success
ch.on_data do |ch, data|
print data
if data =~ /sudo password:/
ch.send_data("password\n")
end
end
end
end
ssh.loop
end
Как насчет того, чтобы сделать 'sudo su'' первым? –
@ Джордан, это разные серверы. Как это мне поможет? 'sudo su -' on на 1-м сервере не будет влиять на удаленный. –
Я не сказал, чтобы сделать это на локальной машине. Ваш вопрос заставил меня поверить, что вы имели в виду «каждый раз» в рамках одной сессии SSH. Если это не так, вы должны уточнить свой вопрос. –