raphink Asked: 2013-02-27 23:19:42 +0800 CST2013-02-27 23:19:42 +0800 CST 2013-02-27 23:19:42 +0800 CST 为给定的 SSH 主机设置变量 772 在ssh_config中,可以选择使用 将一些环境变量导出到主机SendEnv。 还有一种方法可以为每个主机强制为该变量指定一个给定值吗?例如,是否可以仅在连接到主机时才导出$FOO带值的变量?barexample.com ssh 6 个回答 Voted Best Answer Michael Hampton 2013-02-27T23:30:29+08:002013-02-27T23:30:29+08:00 您不能为 中的环境变量指定特定值ssh_config,但您当然可以只将现有环境变量发送到特定主机。 Host example.com SendEnv FOO 要完成链: FOO=bar ssh [email protected] 最后,远程服务器必须AcceptEnv在其sshd_config. AcceptEnv FOO kenorb 2019-06-13T03:47:25+08:002019-06-13T03:47:25+08:00 SetEnv您可以通过在您的中使用来给出特定的值~/.ssh/config,例如 Host * SetEnv FOO=bar 根据man ssh_config: 直接指定一个或多个环境变量及其内容发送给服务器。与 类似SendEnv,服务器必须准备好接受环境变量。 假设您的服务器中有以下行/etc/ssh/sshd_config: AcceptEnv LANG LC_* FOO 还要检查:man ssh_config和man sshd_config。 user156525 2013-02-27T23:39:36+08:002013-02-27T23:39:36+08:00 您可以使用 .ssh/config 文件设置每个主机的配置值。例如: Host example.com SendEnv FOO 请注意,服务器也必须支持它。 huch 2019-01-11T01:05:14+08:002019-01-11T01:05:14+08:00 另一个想法是在 ssh 命令中设置环境变量并运行交互式 shell,例如。我正在尝试使用 env-var 'MANWIDTH' 调用交互式 shell: ssh example.com 'MANWIDTH=120 bash -li' Stephen Quan 2020-11-20T19:21:40+08:002020-11-20T19:21:40+08:00 我想强调SendEnv / AcceptEnv答案和触发它的不同方式。 user1@host1 $ export LC_SECRET="pencil" user1@host1 $ export LC_MAGIC="xyzzy" user1@host1 $ ssh -o "SendEnv LC_*" user2@host2 user2@host2 $ echo $LC_SECRET pencil user2@host2 $ echo $LC_MAGIC xyzzy 这里发生的事情是我们声明了名为LC_SECRETand的环境变量LC_MAGIC。LC_SECRET我们已请求LC_MAGIC使用SendEnv. 远程主机将接受它,因为它在 中具有以下规则/etc/ssh/sshd_config: AcceptEnv LANG LC_* 这显然是对自动接受LANG环境变量或任何以 .开头的环境变量的远程系统的利用LC_。 因此,为什么我将我的变量命名为LC_SECRETand LC_MAGIC。 如果你想正确地做到这一点,远程系统将需要sudo访问权限,以便你修改/etc/ssh/sshd_config以附加其他环境变量。 BacLuc 2022-02-04T03:21:49+08:002022-02-04T03:21:49+08:00 要发送与 shell 中的 env 值不同的 env 变量值: Host host ProxyCommand ENV=value ssh -W [%h]:%p SendEnv ENV
您不能为 中的环境变量指定特定值
ssh_config
,但您当然可以只将现有环境变量发送到特定主机。要完成链:
最后,远程服务器必须
AcceptEnv
在其sshd_config
.SetEnv
您可以通过在您的中使用来给出特定的值~/.ssh/config
,例如根据
man ssh_config
:假设您的服务器中有以下行
/etc/ssh/sshd_config
:还要检查:
man ssh_config
和man sshd_config
。您可以使用 .ssh/config 文件设置每个主机的配置值。例如:
请注意,服务器也必须支持它。
另一个想法是在 ssh 命令中设置环境变量并运行交互式 shell,例如。我正在尝试使用 env-var 'MANWIDTH' 调用交互式 shell:
我想强调
SendEnv / AcceptEnv
答案和触发它的不同方式。这里发生的事情是我们声明了名为
LC_SECRET
and的环境变量LC_MAGIC
。LC_SECRET
我们已请求LC_MAGIC
使用SendEnv
. 远程主机将接受它,因为它在 中具有以下规则/etc/ssh/sshd_config
:这显然是对自动接受
LANG
环境变量或任何以 .开头的环境变量的远程系统的利用LC_
。因此,为什么我将我的变量命名为
LC_SECRET
andLC_MAGIC
。如果你想正确地做到这一点,远程系统将需要
sudo
访问权限,以便你修改/etc/ssh/sshd_config
以附加其他环境变量。要发送与 shell 中的 env 值不同的 env 变量值: