如何在Linux上禁用ssh密码登录以提高安全性
如何禁止SSH客户端使用密码访问,而只允许使用SSH密钥登录SSH。
如何在Linux操作系统上禁用SSH的密码身份验证?
本教程说明如何在Linux上永久禁用ssh密码登录,而仅使用ssh密钥登录。
因此,首先,您需要设置一个常规的非特权用户帐户。
接下来,配置用于登录的SSH密钥。
一旦配置了SSH密钥,就需要为所有用户(包括root用户)禁用密码登录。
此页面"向您说明如何在Linux或基于Unix的系统上生成ssh密钥并禁用密码身份验证"。
为了演示,我在这里使用Ubuntu Linux,但它应与其他Linux发行版一起使用,例如CentOS/RHEL/Fedora/Debian等。
步骤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).`