
我以 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 解釋。