Как я могу одобрить определенные компьютеры для 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/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 цифры.