![以 root 身份运行 ssh 客户端总是使用 /root/.ssh 而不是 ~/.ssh](https://linux22.com/image/1606555/%E4%BB%A5%20root%20%E8%BA%AB%E4%BB%BD%E8%BF%90%E8%A1%8C%20ssh%20%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%80%BB%E6%98%AF%E4%BD%BF%E7%94%A8%20%2Froot%2F.ssh%20%E8%80%8C%E4%B8%8D%E6%98%AF%20~%2F.ssh.png)
我以 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。