У меня есть сервер под управлением CentOS 7. У меня есть множество клиентов, от Fedora, Ubuntu, CentOS и Windows 10, если это важно. Единственный способ войти на сервер - через ssh на терминале с ключом ssh. Пароль не включен
Что я хочу сделать, так это иметь возможность как суперпользователь разрешить одноразовый вход через пароль с целью добавления ключей ssh с разных машин, чтобы упростить задачу.
Когда клиент вошел в систему, нельзя будет снова использовать пароль для входа в систему, пока это не будет разрешено.
Это содержание моего /etc/ssh/sshd_config
файл с соответствующей информацией
UsePAM yes
PasswordAuthentication no
PubkeyAuthentication yes
ChallengeResponseAuthentication no
Есть какой-либо способ сделать это?
заранее спасибо
Единственный раз, когда вам нужно войти в систему с использованием пароля в данном сценарии, - это при начальной загрузке возможности входа на основе ключа для первой учетной записи пользователя на новом хосте.
Поскольку сервер использует только пользовательский общественный ключ для их аутентификации, для вас в роли системного администратора должно быть безопасно просто попросить у них этот ключ и добавить его в их ~/.ssh/authorized_keys
при создании своей учетной записи. В этом случае не имеет значения, делаете ли вы это вручную, с помощью сценария оболочки или инструмента оркестрации, такого как Ansible.
Естественно, их закрытый ключ никогда не должен покидать компьютер.
Я хочу начать с того, что отвечаю на этот вопрос академически. Я не могу утверждать, что это хорошая идея.
Начните с добавления группы пользователей в систему; напр. keys-only
.
Затем в вашем sshd_config
устанавливать PasswordAuthentication no
только для членов этой группы.
Match Group keys-only
PasswordAuthentication no
Да, все остальные пользователи смогут использовать пароли. Так как...
Когда пользователь SSH входит в первый раз, его следует добавить в keys-only
group таким образом, чтобы последующие входы в систему подпадали под действие правила соответствия выше. Вы можете сделать это с помощью скрипта в /etc/profile.d
и соответствующая политика sudo.
# Add users to the keys-only group if they are not already members.
if ! lid -gn keys-only >/dev/null | grep -q $USER; then
sudo usermod -aG keys-only $USER
fi
На самом деле это только приблизительный шаг, чтобы заставить вас задуматься, и не претендующий на полноту. Вам нужно будет продумать сценарии, например, когда пользователь не успешно добавлен в keys-only
группа. (Последующие входы по паролю все еще разрешены.)