Каждый exec создает среду самостоятельно, переменные окружения теряются.Как и в случае с &&
(выполнить следующую команду, если первый успешен) или с ;
(выполнить в любом случае), вы можете объединять команды в цепочку.
Вы также можете отправить подобный блок для выполнения нескольких действий
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
Или используйте гем net-ssh-session .