Разрешения на закрытый ключ в папке .ssh?


369

Я изменил свои разрешения в своей .sshпапке, и теперь, когда я использую часть программного обеспечения, которая использует мой закрытый ключ, мне приходится каждый раз вводить свой пароль. Какие у меня должны быть права id_rsaдоступа к файлу, чтобы не вводить пароль каждый раз, когда я использую приложение, которое его использует?

В настоящее время мои разрешения установлены на:

-rw-------@ 1 Jody  staff   114 Nov  4 23:29 config
-rw-------  1 Jody  staff  1743 Oct 21  2009 id_rsa
-rw-------@ 1 Jody  staff   397 Oct 21  2009 id_rsa.pub 
-rw-------@ 1 Jody  staff  3855 Sep 13 22:35 known_hosts

Ответы:


622

Обычно вы хотите, чтобы разрешения были:

  • .ssh каталог: 700 (drwx------)
  • открытый ключ ( .pubфайл):644 (-rw-r--r--)
  • закрытый ключ ( id_rsa):600 (-rw-------)
  • наконец, ваш домашний каталог не должен быть доступен для записи группе или другим пользователям (максимум 755 (drwxr-xr-x)).

Я предполагаю, что вы имеете в виду, что вы должны вводить системный / пользовательский пароль каждый раз, а ранее вам не приходилось. Ответ cdhowie предполагает, что вы задали пароль / фразу-пароль при генерации ключей, и если вы это сделали, то, как он говорит, вам придется вводить пароль каждый раз, если вы не используете агент ssh.


12
В другом месте я обнаружил, что при использовании файла авторизованного ключа это должно быть chmod'd до 640, то есть -rw-r -----.
AnneTheAgile

5
Где я могу найти эту информацию на страницах руководства?
Соник

121
Я возвращался к этому посту около 30 раз. Я не могу поверить, я не могу вспомнить это.
JREAM

7
Единственная важная вещь заключается в том, что ничто в .ssh не доступно для записи кому-либо еще, и ни один из секретных ключей не доступен для чтения кому-либо еще.
Маркус Кун,

5
@Cerin разрешение на выполнение для каталога дает возможность перечислять непосредственные дочерние файлы / каталоги этого каталога, файлы внутри папки не «наследуют» бит выполнения их родительской папки.
Томас

82

Я боролся с этим вечно и наконец понял, что нужно. Замените $USERвезде имя пользователя SSH, в которое вы хотите войти на сервере. Если вы пытаетесь войти в систему так, как rootвам нужно использовать, /root/.sshи т. Д., А не так /home/root/.ssh, как для пользователей без полномочий root.

  • Домашний каталог на сервере не должен быть доступен для записи другим пользователям: chmod go-w /home/$USER
  • Папка SSH на сервере требует 700 разрешений: chmod 700 /home/$USER/.ssh
  • Файл Authorized_keys нуждается в 644 разрешениях: chmod 644 /home/$USER/.ssh/authorized_keys
  • Убедитесь, что userвладеете файлами / папками, а не root: chown user:user authorized_keysиchown user:user /home/$USER/.ssh
  • Поместите сгенерированный открытый ключ (из ssh-keygen) в authorized_keysфайл пользователя на сервере
  • Убедитесь, что домашний каталог пользователя установлен так, как вы ожидаете, и содержит правильную .sshпапку, которую вы изменяли. Если нет, используйте usermod -d /home/$USER $USERдля устранения проблемы
  • Наконец, перезапустите ssh: service ssh restart
  • Затем убедитесь, что у клиента есть файлы открытого и закрытого ключей в папке локального пользователя .sshи войдите в систему:ssh user@host.com

Что касается вашего первого абзаца, я могу ssh с открытыми / закрытыми ключами с пользователем на моем локальном компьютере с Linux (например abc), отличным от пользователя на удаленном сервере (например def@123.456.789). Мне просто нужно было убедиться, что локальный пользователь владеет локальными файлами .ssh (например abc:abc, нет root:abc) `
Майкл

1
Спасибо, что выложили все шаги и команды для новичков, Алекс. Ваш один из самых полезных ответов здесь.
Nav

5
+1. «Файл Authorized_keys нуждается в 644 разрешениях» <= это было критически важно!
Le Quoc Viet

Если вы предоставляете режим .ssh directory 700 , то нет смысла давать r-- группе и другим, потому что только вы можете "пройти" через .ssh (при условии, что для этих файлов не существует жестких ссылок). То же самое для принятого ответа. По умолчанию 755 достаточно.
user3125367

400 для файлов pem достаточно по моему опыту.
AT

36

Также убедитесь, что ваш домашний каталог не доступен для записи другим пользователям.

chmod g-w,o-w ~


8
К вашему сведению, эта команда предполагает, что вы вошли в систему как пользователь, а не как root
Alex W

5

Разрешения не должны иметь ничего общего с этим. Ваш закрытый ключ зашифрован паролем, поэтому вам необходимо ввести его, чтобы закрытый ключ можно было расшифровать и использовать.

Вы можете подумать о запуске агента ssh, который может кэшировать расшифрованные ключи и предоставлять их приложениям, которые в них нуждаются.


Спасибо за дополнительную информацию об агенте ssh. Похоже, в Leopard встроен один, так что, думаю, я это сделаю. Возникли проблемы, но я задам другой вопрос.

5
Не стоит недооценивать разрешения. Они определенно все еще вступают в игру.
Алекс W

@AlexW Они вступают в игру с другими аспектами SSH, но не тот, о котором спрашивали в вопросе.
cdhowie

Если у вас нет пароля на закрытые ключи (например, автоматические удаленные программы, называемые скриптами), это вам не поможет. Разрешения необходимы здесь.
nerdoc

«Я должен каждый раз вводить свой пароль. Какими должны быть мои права доступа к файлу id_rsa, чтобы не вводить пароль каждый раз, когда я использую приложение, которое его использует?»
Крейг Хикс,

4

Фелипе прав: каталог, содержащий ваш каталог .ssh, не должен быть доступен для записи ни группе, ни другим. Таким образом, chmod go-w ~следующая логическая вещь, которую нужно попробовать, если вам все равно будет предложено ввести пароль при запуске ssh после запуска ssh-keygen -t rsa; cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys, при условии, что вы не назначаете ключевую фразу в команде ssh-keygen, а ваш каталог .ssh находится в вашем домашнем каталоге.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.