Как я могу одобрить определенные компьютеры для ssh в машину с отключенной аутентификацией по паролю?

Инструкции в https://help.ubuntu.com/community/SSH/OpenSSH/Configuring рекомендуют отключить аутентификацию по паролю, чтобы "было возможно подключаться только с компьютеров, которые были специально одобрены". Но они не говорят, как конкретно одобрить компьютер. Как я могу это сделать?

2 ответа

Решение

Для каждого пользователя, которому вы хотите иметь доступ к серверу, запустите в терминале:

ssh-keygen
ssh-copy-id <username>@<serverIPorDNSname>

Он спросит вас, где его сохранить, по умолчанию все в порядке. Он попросит вас ввести ключевую фразу. Это должно зашифровать ключ на случай кражи или взлома компьютера. Если вам не нужна фраза-пароль, вы оставляете обе фразы-фразы пустыми.

Первая команда создает ключ ssh для текущего пользователя, на котором она запущена. Вторая команда ssh входит в сервер и добавляет ключ текущего пользователя в список серверов, которым разрешено входить в систему. Поскольку ssh-copy-id использует ssh, вам нужно будет сделать это перед тем, как отключить логин с паролем.

Ключи SSH - это две совпадающие половинки. Одна половина рассказана всем, а другая держится в секрете. Используя математический алгоритм, открытую половину можно использовать для расшифровки данных, зашифрованных с помощью закрытого ключа. Если данные успешно расшифровываются с помощью открытого ключа, вы, несомненно, знаете, что это была личная половина ключа, которая его зашифровала. Поэтому, когда вы входите в систему с помощью ключа ssh, клиент отправляет сообщение (зашифрованное с использованием закрытого ключа), которое в основном говорит "впустите меня". Сервер проверяет с помощью открытого ключа, и если открытый ключ находится в списке разрешенных компьютеров, вход в систему успешен.

ssh-copy-id (используя ssh) копирует открытую половину в список серверов, ключи которых разрешены для входа (этот список хранится в /home//.ssh/authorized_keys2 или в случае root в /root/.ssh/authorized_keys2). Если вы уже отключили аутентификацию по паролю, вы все равно можете добавить компьютер. Вам просто нужно скопировать открытый ключ (по адресу /home/username/.ssh/id_rsa.pub на клиентском компьютере) на что-то вроде USB-накопителя и затем добавить содержимое id_rsa.pub в конец / home /< имя пользователя>/. ssh / authorized_keys2 файл на сервере. (Вы можете сделать это, выполнив команду cat /media/USB/stick/path/to/id_rsa.pub >>/home/<username>/.ssh/authorized_keys2 на сервере.)

Iptables

Если компьютеры имеют определенный диапазон IP-адресов, вы можете использовать iptables для контроля доступа. Iptables является частью ядра. Вы можете контролировать их в файле /etc/iptables

# from /etc/iptables
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
#
# loopback device
#
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
#
# all connections already established (started outgoing from my machine)
#
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#
# but SSH - restricted
#
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 138.232.0.0/255.255.0.0 -j ACCEPT
#
# block all others (without answering - thus nobody is able to scan the network)
#
-A INPUT -p icmp --icmp-type echo-request -j DROP
-A RH-Firewall-1-INPUT -j DROP
COMMIT

Интересная строка:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 --source 111.111.0.0/255.255.0.0 -j ACCEPT

Prot 22 является ssh-портом по умолчанию. Если с вашей машиной все по-другому, поменяйте ее. 111.111.0.0/255.255.0.0 -j ACCEPT означает, что он принимает все соединения из 111.111.foo.bar, где "foo" и "bar" - любые 3 цифры.

Другие вопросы по тегам