
У меня есть VPS с CentOS 6. Я заметил много попыток входа через SSH, поэтому я хочу заблокировать его с помощью аутентификации на основе ключей. Вот что я сделал на данный момент...
Запустил следующее на моем клиентском компьютере (OSX)
ssh-keygen -t rsa
Сделал это с настройками по умолчанию (без парольной фразы, имена по умолчанию и т. д.)
Установите следующие разрешения для моего клиента
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
скопировал свой открытый ключ в корень моей пользовательской папки на моем VPS с помощью следующей команды (поддельное имя/IP)
scp id_rsa.pub [email protected]:/home/fakeuser/id_rsa.pub
Здесь я заметил, что у меня НЕТ файла authorized_keys в моем .ssh. Поэтому я использовал touch, чтобы создать его. Затем я использовал CAT, чтобы скопировать содержимое .pub в файл authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys
и установите соответствующие разрешения для .ssh и authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
В /etc/ssh/sshd_config я раскомментировал следующее
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
Затем я перезапустил sshd.
service sshd restart
Из того, что я прочитал, это все, что мне нужно сделать, чтобы включить аутентификацию с открытым ключом. Однако, когда я пытаюсь использовать SSH без указания -i privatekey, мне разрешают войти со всех устройств.
решение1
Если клиентский ключ находится в расположении по умолчанию, ~/.ssh/id_$alg
он используется автоматически, если только вы не используете -o IdentitiesOnly=yes
(или эквивалентную запись в файле конфигурации), чтобы отключить его. Если вы можете подключиться с клиента, у которого нет копии закрытого ключаибез указания пароля, то аутентификация на вашем сервере настроена некорректно. Если вы хотите использоватьтолькоаутентификация privatekey->publickey, настройка PasswordAuthentication no
.
PS: anything >>file
(а anything >file
также) создает файл, если он не существует, он вам не нужен touch
. И удаленный каталог по умолчанию для scp
— это ваш домашний каталог, поэтому вам обычно не нужно его указывать.
Также:
RSAAuthentication
предназначен для SSHv1, который был сломан несколько десятилетий назад и никогда не должен использоваться; он отключен по умолчанию во всех версиях OpenSSH уже давно и полностью удален со стороны сервера, начиная с версии 7.4, хотя я предполагаю, что в CentOS 6, вероятно, нет такой последней версии.
PubkeyAuthentication yes
и AuthorizedKeysFile .ssh/authorized_keys
(plus authorized_keys2
, который является реликтом и больше не используется) являются значениями по умолчанию, поэтому вам на самом деле не нужно их раскомментировать.
решение2
Вам необходимо явно отключить аутентификацию по паролю на сервере, если вы хотите разрешить только открытые/закрытые ключи. В вашем /etc/ssh/sshd_config
изменении или добавлении настройки:
PasswordAuthentication no
Я также предпочитаю явно отключать все другие типы аутентификации, которые я не использую, такие как Kerberos и GSSAPI.