正在通过ssh execute丢失环境变量集。Ruby&;net-ssh

正在通过ssh execute丢失环境变量集。Ruby&;net-ssh,ruby,net-ssh,Ruby,Net Ssh,我想在netssh start中设置Linux环境变量,并在代码中进一步使用它们。但我正在失去变量的范围。你能告诉我怎样才能做到吗 我正在使用NetSSH并通过rsa密钥登录Linux。我已经设置了一个环境变量,我想进一步使用它,但我正在失去该变量的作用域 ssh = Net::SSH.start(host, username ) result = ssh.exec!('setenv SYBASE /opt/sybase && print

我想在netssh start中设置Linux环境变量,并在代码中进一步使用它们。但我正在失去变量的范围。你能告诉我怎样才能做到吗

我正在使用NetSSH并通过rsa密钥登录Linux。我已经设置了一个环境变量,我想进一步使用它,但我正在失去该变量的作用域

ssh = Net::SSH.start(host,
                     username
)
result = ssh.exec!('setenv SYBASE /opt/sybase && printenv') ### Can See environment variable SYBASE
puts result
puts "**********************************************************************************"
result = ssh.exec!('printenv')   #### Lost the environment variable SYBASE set above
puts result
puts "&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"

每个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

或者使用gem。

@peter感谢您建议使用netssh会话。 然而,net ssh会话需要重新编译以使其与net ssh 5.2.0版本兼容。
工作很好,这是我需要的

您是否验证了
csh
确实在远程运行?peter,感谢您提出的NetSSH会话想法,但我现在遇到了以下错误ruby/gems/2.5.0/gems/net-ssh-2.9.4/lib/net/ssh/authentication/pageant.rb:1:'require'中:无法加载此类文件--dl/import(LoadError)对不起,Naga,我自己没有使用过gem,所以我没办法。尝试单独安装所需的gem。