首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

通过ssh execute设置的环境变量丢失。Ruby & net-ssh

通过ssh execute设置的环境变量丢失可能是由于以下原因造成的:

  1. Shell类型:通过SSH远程执行命令时,默认情况下,会使用非交互式(non-interactive)的shell。非交互式shell不会加载用户的配置文件(例如.bashrc或.profile),因此在这种情况下,设置的环境变量可能无法被识别。
  2. SSH会话:SSH连接通常会在远程服务器上启动一个新的进程或会话。在这种情况下,新进程将不会继承原始会话中的环境变量。因此,在通过SSH执行命令时,设置的环境变量在新的会话中不会被保留。

要解决通过SSH execute设置的环境变量丢失的问题,可以考虑以下方法:

  1. 在执行命令之前,明确指定使用交互式shell并加载相应的配置文件。例如,对于Bash Shell,可以使用以下命令执行远程命令:
  2. 在执行命令之前,明确指定使用交互式shell并加载相应的配置文件。例如,对于Bash Shell,可以使用以下命令执行远程命令:
  3. 这将以交互式shell执行远程命令,并加载相应的配置文件,使环境变量得以保留。
  4. 在执行命令时,将环境变量直接传递给命令。例如,可以使用以下命令在远程服务器上执行命令,并将环境变量传递给命令:
  5. 在执行命令时,将环境变量直接传递给命令。例如,可以使用以下命令在远程服务器上执行命令,并将环境变量传递给命令:
  6. 这将在执行命令时设置指定的环境变量,并将其传递给命令。
  7. 在需要设置环境变量的命令中,使用source命令加载环境变量配置文件。例如,可以使用以下命令执行远程命令:
  8. 在需要设置环境变量的命令中,使用source命令加载环境变量配置文件。例如,可以使用以下命令执行远程命令:
  9. 这将在执行命令之前,先加载指定的环境变量配置文件,以保证环境变量的正确设置。

对于Ruby和net-ssh,可以使用以下代码示例来执行远程命令并设置环境变量:

代码语言:txt
复制
require 'net/ssh'

Net::SSH.start('hostname', 'username', keys: ['path/to/private_key']) do |ssh|
  # 在远程服务器上执行命令,并设置环境变量
  ssh.exec!("VAR=value <command>")
end

以上是解决通过SSH execute设置的环境变量丢失问题的一些方法。根据具体情况选择合适的方法来解决问题。如果你对Ruby和net-ssh有更深入的了解,也可以使用其他更高级的方法来处理环境变量的设置和传递。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Openshift 指南

    Openshift 是 RedHat 推出的 PaaS. 从 wr 那里听说的, 这几天一直在玩儿, 感觉很不错, 相比一直以来在压榨的 gae 来说, 更自由, 更像个 vps, 没有明确的配额限制, 用 git 直接提交, 有多个数据库可选, 有简单的 ssh 等等. 简单记录一下, 方便再折腾。 首先在 https://openshift.redhat.com/app/ 注册, 看看首页上的那些语言, 总有一门适合你! 进入后, 可以在 web 上建立 app, 选择语言和平台就好了. 点进去 app 的管理页面, 没有意象之中的繁杂的各种管理选项, 只列出了当前用的语言和本项目的 git 地址. 等等, 这里还有一个隐藏功能, 就是添加 cartridge. 点右上角那个加号, 可以看到可以添加 MongoDB, MySQL, PostgreSQL 这几个数据库和对应的管理界面 RockMongo, PhpMyAdmin, 还有 Cron 可以定时执行任务, 还有个废柴的 Openshift Metrics 会显示 cpu 和 mem 消耗, 最后还有个不明真相的 Jenkins Client. 这个界面不能显示安装了的 cartridge 的端口啊密码啊等信息, 也不能删除 cartridge, Orz. 言而总之, web 界面就是个摆设, 牛逼的工具都在叫 rhc 的命令行工具包里. 在下面链接里有 mac, win, linux 下的安装指南. 看到上面说 win 下需要 Cygwin, 原来觉得这个挺好, 现在觉得挺不伦不类的, 还不如直接到 linux 里折腾. Arch 里 AUR 里就有 rhc, 可以看出丫其实就是一个 Ruby gem, 安装过程也主要就是补齐 gems 依赖: ruby-rest-client, ruby-parseconfig, ruby-json. 在 web 上创建 app 时, 应该就已经让你选一个 domain 做为 app 的后缀了, 不得不说又长又难看. 下面举例说明一下命令用法. console 下创建 domain, 即使在 web 端做了, 本地也有必要做一下:

    01

    .net网站自动化部署-致两年前的遗留的问题

    又到一年国庆,终于有了难得的几天空闲,计划陪陪媳妇娃子,再把最近阅读的几本相关书总结梳理下。当然,计划总是美好的,于时接到了一个老朋友电话。大意是他搞了一个.net小网站,部署了4个节点,每次更新程序都是手动复制到4个机器,时不时忘记部署,忘记备份之类的问题,不胜其烦,希望我帮忙想个办法。回想2年前,在做无人货架项目时,也有部分是.net项目,当时自己也没能处理这个问题,当时用了webdeploy,效果并不理想,虽然后来几乎没碰过.net了,这个问题依然萦绕心头。既然有时间,有报酬,何不接此机会弥补两前年的遗憾呢,于时满口应承了下来。想想现在都在谈CI/CD, DevOps.. 过程应该会是相当愉悦的,又是小网站,要求也不是那么高。网站结构如下,非常简单。

    02

    Linux批量远程命令和上传下载工具

    https://github.com/eyjian/mooon/releases/tag/mooon-tools mooon_ssh:批量远程命令工具,在多台机器上执行指定命令 mooon_upload:批量远程上传工具,上传单个或多个文件到单台或多台机器 mooon_download:批量远程下载工具,从指定机器下载一个或多个文件 mooon-tools-glibc2.17.tar.gz 64位版本,glibc为2.17,点击下载 mooon-tools-glibc2.4.tar.gz 32位版本,glibc2.4,常常可用于64位版本glibc2.17环境,点击下载。 建议复制到目录/usr/local/bin,或在/usr/local/bin目录下解压,以方便所有用户直接使用,而不用指定文件路径。 可以通过环境变量或参数方式指定连接远程机器的用户名、密码和IP地址或IP地址列表,但参数方式优先: 1) 环境变量H等同参数-h,用于指定远程机器的IP或IP列表,多个IP间以逗号分隔,但mooon_download只能指定一个IP 2) 环境变量U等同参数-u,用于指定连接远程机器的用户名 3) 环境变量P等同参数-p,用于指定远程机器的用户密码 4) 环境变量PORT等同参数-P,用于指定远程机器的端口号 环境变量方式和参数方式可以混合使用,即部分通过环境变量设置值,部分以参数方式指定值。 并建议,参数值尽可能使用单引号,以避免需要对值进行转义处理,除非值本身已包含了单引号。 如果使用双引号,则需要做转义,如批量kill掉java进程: mooon_ssh -c="kill \$(/usr/local/jdk/bin/jps|awk /DataNode/'{print \$1}')" 另外,低版本glibc不兼容高版本的glibc,因此glibc2.4的不能用于glibc2.17环境,64位版本也不能用于32位环境。 64位系统上查看glibc版本方法:/lib64/libc.so.6 32位系统上查看glibc版本方法:/lib/libc.so.6 参数无顺序要求,不带任何参数执行即可查看使用帮助,如: $ mooon_ssh  parameter[-c]'s value not set usage: -P[22/10,65535]: remote hosts port, e.g., -P=22. You can also set environment `PORT` instead of `-P`, e.g., export PORT=1998 -c[]: command to execute remotely, e.g., -c='grep ERROR /tmp/*.log' -h[]: remote hosts separated by comma, e.g., -h='192.168.1.10,192.168.1.11'. You can also set environment `H` instead of `-h`, e.g., export H=192.168.1.10,192.168.1.11 -p[]: remote host password, e.g., -p='password'. You can also set environment `P` instead of `-p`, e.g., export P=123456 -t[60/1,65535]: timeout seconds to remote host, e.g., -t=100 -u[]: remote host user name, e.g., -u=root. You can also set environment `U` instead of `-u`, e.g., export U=zhangsan 对于整数类型的参数,均设有默认值和取值范围,如“-P[22/10,65535]”表示默认值为,取值范围为10~65535。对于字符串类型参数,如果为空中括号“[]”,则表示无默认值,否则中括号“[]”中的内容为默认值,如“-u[root]”表示参数“-u”的默认值为root。 mooon_ssh使用示例: 1) 参数方式 mooon_ssh -u=root -p='mypassword' -h=192.168.31.2,192.168.31.3 -c='whoami' 2) 环境变量方式 export U=root export P='mypassword' export H=192.168.31.2,192.168.31.3 mooon_ssh -c='whoami'

    02
    领券