SSH 命令 execution/variable 替换问题

SSH command execution/variable substitution issue

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

示例:

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

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

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

任何关于这个特定问题的thoughts/explanations?

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

您可以通过将命令作为字符串传递来解决此问题,该字符串不会 translated/processed/substituted 在本地传递给 firstuser 或任何其他先前声明的变量。

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

这里需要注意的是 echo ${USER} 单引号 中,它 不适用于双引号 。这是基本的 bash/shell 规则,但出于礼貌,您可以在 https://missing.csail.mit.edu/2020/shell-tools/#shell-scripting

找到更多相关信息

简而言之shell,当变量processed/interpreted/substituted 在本地 时,远程 SSH 服务器会收到乱码: echo firstuser 而不是 echo ${USER},这将按预期进行远程处理。