問題概況
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?