解决SSH登录用户执行的命令部分环境变量参数不生效的问题

问题概况

linux机器在/etc/profile配置完成环境变量后,SSH到目标机器执行命令,但是获取不到已配置的环境变量值。
例如场景:
在/etc/profile配置了http代理

export all_proxy=http://$PROXY_HOST:8118
export ftp_proxy=http://$PROXY_HOST:8118
export http_proxy=http://$PROXY_HOST:8118
export https_proxy=http://$PROXY_HOST:8118

然后 SSH 目标机器,并通过pm2 start app.js 启动应用程序,但是应用程序的请求走不到http代理程序。

解决办法

在 /etc/bashrc 文件中,把配置的那一坨也仍进去。就OK了。

问题原因

SSH 登录默认为非shell登录方式,而非shell登录方式执行的是bashrc脚本初始化环境变量。
而shell登录方式则是执行的是profile脚本初始化环境变量。

参考资料很好的说明了这个问题,就不搬砖了。

参考:Why does an SSH remote command get fewer environment variables then when run manually?

原文地址:https://www.cnblogs.com/calvinK/p/9084191.html

时间: 2024-07-31 04:27:04

解决SSH登录用户执行的命令部分环境变量参数不生效的问题的相关文章

Ubuntu创建新用户并解决ssh登录显示异常

创建用户 #创建ubuntu用户 adduser ubuntu 添加sudo权限 #放开写/etc/sudoers文件的权限 chmod u+w /etc/sudoers #编辑 vim /etc/sudoers ##在root ALL=(ALL) ALL下增加xxx ALL=(ALL) ALL ##四种类型的权限设置,添加任意一种 ##xxx ALL=(ALL) ALL ##允许用户xxx执行sudo命令(需要输入密码) ##%xxx ALL=(ALL) ALL ##允许用户组xxx里面的用户

Java 实现 ssh命令 登录主机执行shell命令

Java 实现 ssh命令 登录主机执行shell命令 1.SSH命令 SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH 是较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题.SSH最初是UNIX系统上的一个程序,后来又迅速扩展到其他操作平台.SSH在正确使用时可弥补网络中的漏洞.SSH客户端适用于多种平台.几乎

解决ssh登录后闲置时间过长而断开连接

解决ssh登录后闲置时间过长而断开连接 时我们通过终端连接服务器时,当鼠标和键盘长时间不操作,服务器就会自动断开连接,我们还的需要重新连接,感觉很麻烦,总结一下解决此问题的方法方法一.修改/etc/ssh/sshd_config配置文件,找到ClientAliveCountMax(单位为分钟)修改你想要的值,执行service sshd reload 方法二.找到所在用户的.ssh目录,如root用户该目录在:/root/.ssh/在该目录创建config文件vi /root/.ssh/conf

ssh无密码登录远程主机执行特定命令的注意事项

最近的一个项目要结合使用rabbitmq.keepalived.supervisor.其中的一个场景为某个keepalived实例被提升为MASTER后需要到部署了rabbitmq client的远程主机上kill掉这些client进程. 一般的思路为配置keepalived所在主机与部署了client的主机之间的无密码ssh登录,然后通过ssh执行远程命令,先获取各client进程的进程号,然后逐个kill掉这些进程. 大体思路很简单,但过程中却碰到了不少问题.配置无密码ssh至远程主机的步骤

expect实现自动scp和ssh登录后执行命令,并向bash提供返回值

#!/bin/bash # 全局变量:用户名,普通用户密码,root密码 loginname="icgsu" userpwd="netentsec" rootpwd="netentsec" # 读取iplist cat /root/iplist | while read line do ip=($line) # scp脚本及ssh登录执行 /usr/bin/expect<<EOF set timeout 10 spawn scp /r

Linux命令之远程登录与执行远程主机命令

实现远程登录的命令 ssh.telnet.rlogin (1)ssh ssh命令是openssh套件中的客户端连接工具,可以给予ssh加密协议实现安全的远程登录服务器.ssh命令用于远程登录上Linux主机. 常用格式:ssh [-l login_name] [-p port] [[email protected]]hostname更详细的可以用ssh -h查看. 语法: ssh(选项)(参数) 选项: -1:强制使用ssh协议版本1: -2:强制使用ssh协议版本2: -4:强制使用IPv4地

解决ssh登录Host key verification failed

使用SSH登录某台机器,有时因为server端的一些变动,会出现以下信息: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Some

解决ssh登录后全局环境变量获取不到的问题

1.已添加了linux系统环境变量变量于/etc/profile vi /etc/profile export JAVA_HOME=/opt/java/jdk1.6.0_43export JRE_HOME=/opt/java/jdk1.6.0_43export PATH=$PATH:$JAVA_HOME/bin 2.putty登录到机器执行set命令可以看到该环境变量,java命令也是可以找到的 3.但是通过python直接ssh访问该机器,或者Jenkins ssh remote访问该机器,结

SSH登录远程主机执行脚本找不到环境变量

这是因为在Linux上,bash会有四种模式,根据不同的case,Linux会加载不同模式的bash.一般如果你自己直接登录主机,能看到环境变量,但是使用ssh 远程登录执行脚本就找不到环境变量,那么在你的脚本中修改脚本解释器为如下形式,就能解决你的问题: #!/bin/bash --login 如果想了解详细的bash的四种模式以及各种模式的特点,请参考下面这篇文章,分析的非常详细: SSH连接远程主机执行脚本的环境变量问题