Вопрос или проблема
Мне нужно было выполнить некоторые операции SCP с помощью скриптов, поэтому я использовал ssh-keygen
и ssh-copy-id
, чтобы запускать их без ввода пароля каждый раз.
Однако теперь SSH также работает без пароля: я просто могу подключиться к серверу, и он автоматически меня авторизует. Мне не нужно, чтобы сам SSH работал без пароля, поэтому в целях безопасности я хотел бы отключить это.
Наверняка я что-то упускаю, но как сделать так, чтобы общий ключ использовался только для SCP, а SSH по-прежнему требовал пароль?
Ответ или решение
Чтобы использовать SSH-ключ только с SCP и не разрешать аутентификацию без пароля для SSH, необходимо создать ключи так, чтобы SCP использовал их, но чтобы SSH продолжал требовать пароль. Для достижения этого результата можно использовать следующие подходы:
-
Изменение конфигурации SSH: Отключите аутентификацию с помощью ключей SSH при доступе к серверу, добавив определённые параметры в файл конфигурации SSH.
-
Использование отдельного пользователя для SCP: Создайте отдельного пользователя на сервере для операций SCP, который будет иметь доступ по ключу, оставив SSH без изменения для стандартного пользователя.
-
Настройка файла конфигурации SSH:
Вам понадобится изменить файл конфигурации SSH на клиенте (
~/.ssh/config
). Добавьте следующие строки, чтобы использовать ключ только для SCP:Host your-server-alias HostName your.server.com User your-username IdentityFile ~/.ssh/your_private_key PreferredAuthentications publickey
Здесь
your-server-alias
– это псевдоним, который вы можете использовать для доступа к серверу через SCP или SSH. СтрокаPreferredAuthentications publickey
указывает, что при подключении через SSH этот ключ использовать не следует. -
Реализация ограничения на уровне сервера:
Если вы имеете контроль над сервером, в файле конфигурации SSH сервера
/etc/ssh/sshd_config
можно настроить ограничения:- Вы можете использовать
Match
для определения правил, которые применяются к определенным пользователям или группам. Например:
Match User your-username PasswordAuthentication yes PubkeyAuthentication no
Это позволит требовать пароль для пользователя
your-username
, но не будет разрешать аутентификацию по ключам. - Вы можете использовать
-
Отключение аутентификации по ключам:
В качестве последнего резерва, если предыдущие шаги не сработают, вы можете изменить права на файл с ключом, чтобы его нельзя было использовать для SSH:
chmod 600 ~/.ssh/your_private_key
Однако это приведет к тому, что SCP также не сможет использовать этот ключ.
-
Командная строка SCP:
После всех этих настроек вы сможете использовать SCP с ключом, как обычно:
scp -i ~/.ssh/your_private_key localfile your-username@your.server.com:/path/to/remote/file
Таким образом, можно организовать систему, при которой SCP будет использовать SSH-ключи, а SSH по-прежнему будет требовать ввода пароля. Не забудьте протестировать все изменения перед тем, как делать их в продакшене, чтобы избежать блокировки доступа.