SSH предоставляет 3 способа аутентификации клиента: по ip адресу клиента(небезопасно), по публичному ключу клиента и стандартный парольный метод. В данной статье рассмотрим аутентификацию удалённого пользователя по ключу с полным запретом доступа по паролю на FreeBSD используя OpenSSH. Публичный ключ пользователя хранится на сервере, секретный ключ у клиента.
Для начала, нужно сгенерировать ключи, используя программу ssh-keygen, например:
ssh-keygen -t rsa #создаст пару ключей RSA длиной 1024 бита.
- -t указывает тип ключа (RSA DSA)
- -f указывает файл, в котором следует сохранить ключи (по умолчанию используются файлы $HOME/.ssh/id_rsa и $HOME/.ssh/id_dsa для ключей rsa и dsa соответственно)
- -b указание длины ключа в битах
ssh-keygen -t rsa -b 2048 -f $HOME/.ssh/id_rsa
Программа запросит ввод пароля для шифрования секретного ключа, для исключения использования ключа посторонними лицами. Данный пароль будет необходимо вводить каждый раз при использовании секретного ключа. Если вам это не нужно, оставьте пароль пустым.
В итоге мы получим пару ключей: один секретный id_rsa (зашифрованный паролем, если его указывали при создании), а второй публичный с расширением pub(id_rsa.pub).
Публичный ключ необходимо будет скопировать в домашнюю директорию сервера $HOME/.ssh/authorized_keys. только в этом случае сервер будет знать ключ данного пользователя и сможет аутентифицировать его без пароля. Файл authorized_keys может содержать несколько публичных ключей.
Установим на директорию ~/.ssh следующие права:
[dreamer@server ~]% chmod 700 ./.ssh [dreamer@server ~]% chmod 600 ./.ssh/id_rsa
Теперь поправим конфиг sshd демона:
vi /etc/ssh/sshd_config
#Номер порта и версия протокола #Port 22 #Protocol 2 #AddressFamily any #на каких адресах слушать ListenAddress 192.168.1.1 ListenAddress XXX.XXX.XXX.XXX #ListenAddress :: # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_dsa_key # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h #ServerKeyBits 768 # Logging # obsoletes QuietMode and FascistLogging #SyslogFacility AUTH #LogLevel INFO # Authentication: #LoginGraceTime 2m #принимать логин root или нет (по умолчанию no) PermitRootLogin yes #StrictModes yes #MaxAuthTries 6 #RSAAuthentication yes #PubkeyAuthentication yes #AuthorizedKeysFile .ssh/authorized_keys #RhostsRSAAuthentication no # similar for protocol version 2 #HostbasedAuthentication no # Change to yes if you don't trust ~/.ssh/known_hosts for # RhostsRSAAuthentication and HostbasedAuthentication #IgnoreUserKnownHosts no # Don't read the user's ~/.rhosts and ~/.shosts files #IgnoreRhosts yes # Change to yes to enable built-in password authentication. # этот параметр определяет, будет ли производится стандартная # парольная проверка (по умолчанию yes) PasswordAuthentication no # запрещает вход с пустым паролем PermitEmptyPasswords no # Change to no to disable PAM authentication #отключаем аутентификацию через механизм PAM ChallengeResponseAuthentication no # Kerberos options #KerberosAuthentication no #KerberosOrLocalPasswd yes #KerberosTicketCleanup yes #KerberosGetAFSToken no # GSSAPI options #GSSAPIAuthentication no #GSSAPICleanupCredentials yes #отключаем для полного запрета аутентификации по паролю UsePAM no #AllowTcpForwarding yes #GatewayPorts no #X11Forwarding yes #X11DisplayOffset 10 #X11UseLocalhost yes #PrintMotd yes #PrintLastLog yes #TCPKeepAlive yes #UseLogin no #UsePrivilegeSeparation yes #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 #ClientAliveCountMax 3 #UseDNS yes #PidFile /var/run/sshd.pid #MaxStartups 10 #PermitTunnel no # no default banner path #Banner /some/path # override default of no subsystems Subsystem sftp /usr/libexec/sftp-server
Осталось запустить sshd демон:
/etc/rc.d/sshd start
и для автозапуска в /etc/rc.conf добавить строчку sshd_enable="YES"
Немає коментарів:
Дописати коментар