如何在Linux上禁用ssh密码登录以提高安全性

时间:2020-01-09 14:17:04  来源:igfitidea点击:

如何禁止SSH客户端使用密码访问,而只允许使用SSH密钥登录SSH。
如何在Linux操作系统上禁用SSH的密码身份验证?

本教程说明如何在Linux上永久禁用ssh密码登录,而仅使用ssh密钥登录。
因此,首先,您需要设置一个常规的非特权用户帐户。
接下来,配置用于登录的SSH密钥。
一旦配置了SSH密钥,就需要为所有用户(包括root用户)禁用密码登录。
此页面"向您说明如何在Linux或基于Unix的系统上生成ssh密钥并禁用密码身份验证"。
为了演示,我在这里使用Ubuntu Linux,但它应与其他Linux发行版一起使用,例如CentOS/RHEL/Fedora/Debian等。

步骤1登录到远程服务器

使用ssh命令或客户端(例如Putty):

$ ssh root@server-ip-here
$ ssh [email protected]

步骤2建立新的使用者帐户

在基于Linux的系统上执行以下命令以创建一个名为Hyman的新用户:

# useradd -m -s /bin/bash Hyman

使用passwd命令设置用户密码:

# passwd Hyman

输出示例:

Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully

将用户添加到sudo(Ubuntu/Debian)组。
如果您使用的是CentOS/RHEL/Fedora Linux,则将用户添加到wheel补充/辅助组:

# usermod -aG sudo Hyman

RHEL/CentOS Linux用户,执行:

# usermod -aG wheel Hyman

上面的命令允许组轮或sudo中的人运行所有命令。
使用id命令验证它:

# su - Hyman
$ id Hyman

输出示例:

uid=1000(Hyman) gid=1000(Hyman) groups=1000(Hyman),27(sudo)

退出登录shell:

$ logout

请注意,您也可以将现有用户添加到sudo或wheel组。
无需创建新的用户帐户:

# usermod -aG sudo userNameHere #Debian/Ubuntu
# usermod -aG wheel userNameHere #CentOS/RHEL

步骤3在远程计算机上安装ssh密钥

所有命令必须在本地系统/桌面/macos/freebsd工作站上执行。
创建密钥对:

$ ssh-keygen -t rsa

在远程服务器上安装公钥:

$ ssh-copy-id -i $HOME/.ssh/id_rsa.pub [email protected]

输出示例:

/usr/local/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/Hyman/.ssh/id_rsa.pub"
/usr/local/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/local/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: 

Number of key(s) added:        1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

测试ssh密钥库登录:

$ ssh [email protected]

输出示例:

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.8.6-x86_64-linode78 x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.

Hyman@ubuntu:~$

要以管理员身份(用户root)运行命令,请使用sudo {command}。
例如:

$ sudo ls /root/

要获得root shell,请执行:

$ sudo -s

有关更多信息,请参见如何在Linux/Unix系统上设置SSH密钥。

步骤4禁用root登录和基于密码的登录

我们需要使用新创建的名为Hyman的用户登录服务器:

ssh Hyman@server-ip-here
ssh [email protected]

编辑/etc/ssh/sshd_config文件,执行:

$ sudo vi /etc/ssh/sshd_config

查找ChallengeResponseAuthentication并将其设置为no:

ChallengeResponseAuthentication no

接下来,找到也设置为no的PasswordAuthentication:

PasswordAuthentication no

搜索UsePAM并将其也设置为no:

UsePAM no

最后寻找PermitRootLogin并设置为no:

PermitRootLogin no

保存并关闭文件。
在Linux上重新加载或重新启动ssh服务器:

# /etc/init.d/ssh reload

我们可以对基于systemd的Linux发行版使用systemctl命令:

$ sudo systemctl reload ssh

可以在RHEL/CentOS Linux上使用以下功能:

# /etc/init.d/sshd reload

再次对于基于系统的发行版(例如CentOS/RHEL 7.x或Fedora的最新版本),请尝试:

$ sudo systemctl reload sshd

步骤5验证

尝试以root用户身份登录:

$ ssh [email protected]
`Permission denied (publickey).`

尝试仅使用密码登录:

$ ssh [email protected] -o PubkeyAuthentication=no
`Permission denied (publickey).`