首页 > 解决方案 > SSH 命令执行/变量替换问题

问题描述

我试图执行一个ssh命令,我看到它从主机(本地)机器而不是我ssh进入的机器(远程服务器)获取环境变量。

例子:

firstuser@remote> ssh testuser@remote echo ${USER}
firstuser

它期望它回显testuser而不是firstuser因为它是我连接的用户名。

如果有帮助,我正在使用 CentOS7。

关于这个特定问题的任何想法/解释?

标签: bashshellsshcentos7

解决方案


如果我理解正确,您是${USER}从主机(本地)机器而不是从 SSH(远程)服务器获取变量。这是因为您在一个命令中执行所有操作。您的命令在被发送到远程 (SSH) 服务器之前正在本地处理 - 这意味着正在替换变量。

您可以通过将命令作为字符串传递来解决此问题,该字符串不会在本地翻译/处理/替换为(在您的情况下 firstuser)或任何其他先前声明的变量。

firstuser@mymachine> ssh testuser@mymachine 'echo ${USER}'

这里的重要说明echo ${USER}单引号,它不适用于双引号。这是基本的bash /shell 规则,但出于礼貌,您可以在https://missing.csail.mit.edu/2020/shell-tools/#shell-scripting找到更多相关信息

简而言之,当您尝试在本地echo firstuser处理/解释/替换变量时,远程 SSH 服务器会收到 litteral: not echo ${USER},这将按预期进行远程处理。


推荐阅读