以 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 選項(以及在設定檔中指定的多個身分)。如果CertificateFile指令沒有明確指定證書,ssh也會嘗試從透過將-cert.pub附加到身分檔案名稱而獲得的檔案名稱載入憑證資訊。

請注意,如果您執行使用“~”指定檔案名稱的命令,如下所示:

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

那麼「~」將由您的 shell 解釋,而不是由 ssh 解釋。

相關內容