ruby - 丢失通过 ssh 执行设置的环境变量。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 都会自己创建一个环境,环境变量会丢失。就像您对&&
(如果第一次成功则执行下一个命令)或;
(仍然执行)一样,您可以链接命令。
您还可以发送这样的块来执行多个操作
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。
推荐阅读
- netsuite - 使用套件脚本从 netsuite 获取数据
- vba - 使用 VBA 可以访问与我在同一网络上的另一台计算机的桌面吗?
- arrays - 使用映射的数组的自定义属性委托
- sharepoint-2013 - 查询用户具有读取权限的 Web 中的所有列表 (SharePoint 2013)
- php - 从 wordpress 迁移到 opencart 后为产品链接设置重定向
- shader - iOS SceneKit SCNTechnique Metal vertex and fragment 方法在 iOS12 中不起作用
- mysql - MySQL 创建表,如果存在覆盖新值 [不使用 DROP TABLE]
- android - 从 MySQL 数据库中获取位置并在地图上显示它们
- java - netbeans SOAP 操作返回 null,但在 SOAPUI 中正常工作
- kotlin - 如何调用内部类的函数