丢失通过 ssh 执行设置的环境变量。 Ruby & 网络-ssh
Losing environment variable set via ssh execute. Ruby & net-ssh
我想在 net-ssh start 中设置 Linux 环境变量,并在我的代码中进一步使用它们。但是我失去了变量的范围。你能告诉我如何实现吗?
我正在使用 net-ssh 并通过 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 自己创建一个环境,environmont 变量丢失。
就像您使用 &&
(如果第一次成功则执行下一个命令)或使用 ;
(仍然执行)一样,您可以链接命令。
您也可以像这样发送一个块来执行多个操作
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 net-ssh-session.
@peter 谢谢你的建议 net-ssh-session。
然而 net-ssh-session 需要重新编译以使其与 net-ssh 5.2.0 版本兼容。
Example here 效果很好,正是我所需要的。
我想在 net-ssh start 中设置 Linux 环境变量,并在我的代码中进一步使用它们。但是我失去了变量的范围。你能告诉我如何实现吗?
我正在使用 net-ssh 并通过 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 自己创建一个环境,environmont 变量丢失。
就像您使用 &&
(如果第一次成功则执行下一个命令)或使用 ;
(仍然执行)一样,您可以链接命令。
您也可以像这样发送一个块来执行多个操作
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 net-ssh-session.
@peter 谢谢你的建议 net-ssh-session。 然而 net-ssh-session 需要重新编译以使其与 net-ssh 5.2.0 版本兼容。 Example here 效果很好,正是我所需要的。