以 root 身份运行 ssh 客户端总是使用 /root/.ssh 而不是 ~/.ssh

以 root 身份运行 ssh 客户端总是使用 /root/.ssh 而不是 ~/.ssh

我以 root 身份登录 Linux (Debian stretch) 服务器。当我以 root 身份运行 ssh 客户端时,ssh 客户端似乎坚持使用/root/.ssh/作为所有 ssh 配置和密钥文件的位置,而不是~/.ssh

$ id
uid=0(root) gid=0(root) groups=0(root)
$ export HOME=/srv/scratch/user
$ cd ~/.ssh
$ pwd
/srv/scratch/user/.ssh
$ ssh -vvv [email protected]
OpenSSH_7.4p1 Debian-10+deb9u7, OpenSSL 1.0.2t  10 Sep 2019
debug1: Reading configuration data /root/.ssh/config
debug1: /root/.ssh/config line 3: Applying options for example.com
debug1: Reading configuration data /etc/ssh/ssh_config
... more lines that never mention /srv/scratch/user/.ssh ...

为什么 ssh 客户端不使用.ssh中的目录/srv/scratch/user

答案1

export HOME=/srv/scratch/user

ssh不使用HOME环境变量来查找用户的主目录。它调用getpwuid()并使用从中返回的主目录。getpwuid()返回用户信息/etc/passwd或特定系统存储用户信息的任何位置。

你可以使用以下命令让 ssh 读取不同的配置文件-F选项:

-Fconfigfile
指定备用的每个用户配置文件。如果在命令行中给出了配置文件,则系统范围的配置文件 (/etc/ssh/ssh_config) 将被忽略。每个用户配置文件的默认值为 ~/.ssh/config。

您可以使用以下方式指定 ssh 密钥-i

-我Identity_file
选择一个文件,从中读取用于公钥认证的身份(私钥)。默认值为 ~/.ssh/id_dsa、~/.ssh/id_ecdsa、~/.ssh/id_ed25519 和 ~/.ssh/id_rsa。还可以在配置文件中按主机指定身份文件。可以使用多个 -i 选项(并在配置文件中指定多个身份)。如果未通过 CertificationFile 指令明确指定证书,ssh 还将尝试从通过将 -cert.pub 附加到身份文件名而获得的文件名中加载证书信息。

请注意,如果您使用“~”运行命令来指定文件名,如下所示:

ssh -F ~/some/config/file ...

那么“~”将由你的 shell 解释,而不是 ssh。

相关内容