Linux ssh: позвольте аутентификацию с открытым ключом, не давая пользовательские права чтения на закрытый ключ

Существует то, что надеется быть разумной ссылочной реализацией в ndmjob. Не должно быть слишком твердым к рожку для обуви это во что-то осуществимое с несколькими сценариями.

14
задан 23 October 2014 в 01:37
2 ответа

Это - одна из причин sudo, существует. Просто позвольте Вашим пользователям выполнять 1 единственную команду только с предавторизованными параметрами командной строки, и решены самые очевидные обманы. например,

#/etc/sudoers
%users ALL = (some_uid) NOPASSWD: /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

настраивает sudo, таким образом, все члены группы users могут выполнить команду ssh как пользователь some_uid, не вводя их собственный пароль (или та из учетной записи some_uid), когда они работают:

sudo -u some_uid /usr/bin/ssh -i /home/some_uid/.ssh/remote-host.key username@remotehost

Удаляют NOPASSWD: опция вызвать это, пользователи вводят свои собственные пароли перед входом в удаленный хост.
Возможно настраивает псевдоним или сценарий обертки как удобство для Ваших пользователей, потому что sudo довольно требовательно в отношении использования корректных аргументов.

31
ответ дан 20 November 2019 в 23:01
  • 1
    Работы как очарование. Это должно также быть рекомендуемым ответом для дубликата, упомянутого wenzul. –  Philipp 23 October 2014 в 03:12

Это походит на хороший вариант использования для основанной на хосте аутентификации. Это - метод аутентификации, где SSH не использует пользователя индивидуума , включают локальную машину (в этом случае, Ваш сервер) для аутентификации; вместо этого, это использует хост закрытый ключ, тот, сохраненный в /etc/ssh/ и который только читаем root.

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

server-hostname +

, где server-hostname название Вашего сервера, и + литеральный знак "плюс", который служит подстановочным знаком, означающим "любого пользователя".

необходимо будет также удостовериться, что удаленная машина может проверить ключ хоста сервера, что означает, что ключ хоста сервера должен быть перечислен или в /etc/ssh/ssh_known_hosts или в ~/.ssh/known_hosts на удаленной машине. Если это уже не имеет место, можно настроить его путем вхождения в удаленную машину и выполнения

ssh-keyscan server-hostname >> /etc/ssh/ssh_known/hosts

, После того как Вы настроили эти шаги, можно удалить закрытый ключ на сервере полностью, если Вам не нужен он ни для чего больше. (И если Вы делаете, можно всегда устанавливать его, чтобы быть только читаемыми [1 110] или что-то.)

можно также легко сделать вещи как разрешение или отклонение определенного пользовательского доступа к удаленной машине. См. страницы справочника ssh и hosts.equiv для деталей.

Одна проблема с этой установкой состоит в том, что пользователи, которые входят в удаленную машину, могут изменить .shosts. Нет ничего, что они могут сделать, который позволил бы им входить в систему удаленной машины как другой пользователь, но они могли отключить свой собственный или доступ других к удаленной машине. Если это - беспокойство, Вы смогли делать .shosts только перезаписываемый [1 115] или что-то - я не уверен, работает ли это, но Вы могли бы попробовать его и видеть. (Другие методы как тот с [1 116] восприимчивы к тому же риску, так как пользователь мог всегда удалять ~/.ssh/authorized_keys.)

10
ответ дан 20 November 2019 в 23:01
  • 1
    +1; я думаю, что эта опция обеспечивает хорошую гибкость, в случае, если пользователь должен использовать функции SSH кроме терминала, такие как перенаправление портов, безопасная копия, и т.д. Даже альтернативный клиент SSH должен работать. sudo вариант мог быть лучше для вниз заблокированной среды, хотя... –  mpontillo 23 October 2014 в 16:48

Теги

Похожие вопросы