正在通过ssh execute丢失环境变量集。Ruby&;net-ssh
我想在netssh start中设置Linux环境变量,并在代码中进一步使用它们。但我正在失去变量的范围。你能告诉我怎样才能做到吗 我正在使用NetSSH并通过rsa密钥登录Linux。我已经设置了一个环境变量,我想进一步使用它,但我正在失去该变量的作用域正在通过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
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。