
Я вошел в сервер 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.