Запуск клиента ssh от имени root всегда использует /root/.ssh вместо ~/.ssh

Запуск клиента ssh от имени root всегда использует /root/.ssh вместо ~/.ssh

Я вошел в сервер Linux (Debian stretch) как root. Когда я запускаю клиент ssh как root, то, похоже, клиент 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вариант:

configfile
Указывает альтернативный файл конфигурации для каждого пользователя. Если файл конфигурации указан в командной строке, то системный файл конфигурации (/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 ...

то «~» будет интерпретироваться вашей оболочкой, а не ssh.

Связанный контент