Разрешения на закрытый ключ в папке .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.