为给定的 SSH 主机设置变量

rap*_*ink 23 ssh environment-variables

在 中ssh_config,可以选择使用 将一些环境变量导出到主机SendEnv

是否还有一种方法可以为每个主机强制此变量的给定值?例如,是否可以仅在连接到主机时导出$FOO带值的变量?barexample.com

Mic*_*ton 22

您不能为 中的环境变量提供特定ssh_config,但您当然可以将现有环境变量仅发送到特定主机。

Host example.com
    SendEnv FOO
Run Code Online (Sandbox Code Playgroud)

要完成链:

FOO=bar ssh user@example.com
Run Code Online (Sandbox Code Playgroud)

最后,远程服务器必须AcceptEnv在其sshd_config.

AcceptEnv FOO
Run Code Online (Sandbox Code Playgroud)

  • 感谢您确认我的怀疑 ;-) 我想要的是类似于 `ssh_config` 中的 `SetVar FOO='bar'` ;) (6认同)
  • 对我来说反复出现的情况是旧系统不支持`TERM=tmux-256color`,所以我想要每个远程主机的回退(使用通配符)。 (3认同)
  • 对于遇到此问题的其他人请注意(因为这是 sshd 和 `SendEnv` 的热门搜索结果之一)——如果您使用 `ControlPersist` 缓存 ssh 连接,则仅使用来自初始连接将存在。如果您想使用不同的“SendEnv”变量链接多个离散的“ssh”命令,则不能使用“ControlPersist”(afaict) (2认同)

ken*_*orb 15

您可以通过SetEnv在您的~/.ssh/config,例如

Host *
  SetEnv FOO=bar
Run Code Online (Sandbox Code Playgroud)

根据man ssh_config

直接指定一个或多个环境变量及其内容发送到服务器。与 类似SendEnv,服务器必须准备好接受环境变量。

假设您的服务器有以下行/etc/ssh/sshd_config

AcceptEnv LANG LC_* FOO
Run Code Online (Sandbox Code Playgroud)

还要检查:man ssh_configman sshd_config

  • 困惑的读者请注意(就像我第一次阅读本文时的我一样):这是自 2018 年 8 月发布的 OpenSSH 7.8 以来的新功能,它需要一段时间才能通过操作系统更新提供给普通用户。(但一旦它变得普遍,它将是迄今为止解决问题的最佳方法) (8认同)