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}
,这将按预期进行远程处理。
我试图执行 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}
,这将按预期进行远程处理。