如何在 SSH 配置文件中使用变量

Jac*_*yOL 8 bash ssh terminal

我想用它$HOME来替换/Users/Me我的 ssh 配置文件

Host MyHost
    HostName 192.168.1.1
    IdentitiesOnly yes
    User me
    IdentityFile "/Users/Me/.ssh/id_rsa"
Run Code Online (Sandbox Code Playgroud)

但我得到了no such identity: $HOME/.ssh/id_rsa: No such file or directory

tel*_*coM 10

至少在我的 Debian 10 系统上,ssh_config(5)手册页显示:

IdentityFile的参数可以使用波形符语法来引用用户的主目录或 TOKENS 部分中描述的令牌。

因此,$HOME您可以IdentityFile将该行写为:

IdentityFile "~/.ssh/id_rsa"
Run Code Online (Sandbox Code Playgroud)

或作为:

IdentityFile "%d/.ssh/id_rsa"
Run Code Online (Sandbox Code Playgroud)

环境变量语法 ( ${HOME}) 支持仅在IdentityAgent配置项中提及,而不是在IdentityFile. 根据OpenSSH 发行说明, OpenSSH 8.4 版本(2020-09-27 发布)中添加了环境变量语法支持CertificateFileControlPath以及配置关键字,而 Debian 10 只有 7.9 版本(向后移植了最新的安全修复程序)。IdentityFile

因此,在撰写本文时,除非您使用的是非常新的 Linux 发行版,否则您的 OpenSSH 版本可能太旧,无法支持使用${HOME}SSH 配置文件中的语法。