优秀的服务器管理员会使用多个难以记住的强密码。然而,每次访问远程服务器时都需要输入每一项,既困难又不方便。为了解决这个问题,本教程介绍了无密码 SSH 以及如何在 Linux 上配置它。

什么是无密码 SSH?
无密码SSH允许您将客户端的SSH公钥导出到远程服务器,从而允许客户端无需密码即可登录。实现这一点的方法是使用非对称密钥对。
身份验证过程的工作原理如下。
当客户端尝试访问 SSH 服务器时,服务器首先检查客户端的公钥是否经过授权。如果允许,身份验证过程将继续。如果没有,该过程将终止,您将无法再访问服务器。
一旦服务器接受客户端的公钥,服务器就使用客户端的公钥来加密消息。服务器加密消息后,将其发送给客户端。
客户端接收来自服务器的消息。收到消息后,客户端尝试使用其私钥解密该消息。当客户端使用私钥解密消息时,服务器会检测到它并建立与 SSH 服务器的连接。
如果客户端无法解密服务器发送的消息,则与服务器的连接过程将中止。

为什么要使用SSH无密码登录?
与传统的基于密码的登录方法相比,无密码 SSH 具有多种优势。值得使用无密码 SSH 的最重要好处包括:
方便、安全的登录
它使身份验证过程变得很方便,因为您无需记住并键入密码即可连接到 SSH 服务器。此外,它基于公私密钥加密技术,消除了通过中间人或其他网络钓鱼攻击窃取密码的风险。
自动执行备份任务
使用 Rsync 和其他实用程序,您可以自动执行每周备份在美国办公室生成的内容并将其存储在中国办公室的任务。此过程通过 SSH 加密,并且是完全自动的,因为您不需要输入密码。
挂载远程文件系统
当您需要使用 SSHFS 挂载远程文件系统时,无密码 SSH 非常有用。无需密码访问 SSHFS 服务器允许 SSHFS 服务器在客户端启动时自行挂载。
此外,多个 git 服务器使用 SSH 公钥身份验证。因此,您创建的用于连接到 SSH 服务器的非对称密钥对可用于其他目的,例如在连接到 Git 服务器时进行身份验证。
在Linux上设置SSH无密码登录
#1.确保您已安装 SSH 服务器和客户端
您需要做的第一件事是确保您的系统上安装了 SSH 服务器来充当您的服务器。为此,您需要打开终端并输入以下命令:
sudo apt-get install openssh-server如果操作系统上没有安装新的软件包,则充当服务器的计算机已安装并运行 SSH 服务器。同样,请确保充当客户端的系统具有连接到 SSH 服务器所需的软件包。为此,请打开终端并输入以下命令:
sudo apt-get install openssh-client现在大多数 Linux 发行版都默认安装了 SSH 客户端和服务器。
#2.创建非对称密钥对
验证 SSH 服务器和客户端是否具有所需的软件包后,您可以生成非对称密钥来访问 SSH 服务器,而无需输入密码。
为此,您需要在充当客户端的计算机上打开一个终端,然后键入以下命令:
ssh-keygen -b 4096 -t rsa命令各参数含义如下。
ssh-keygen :生成密钥对的命令。
-b 4096 :表示生成的非对称密钥的大小为4096位。例如,您可以选择其他尺寸,例如 1024 或 2048。
-t rsa :表示生成密钥对的算法必须是RSA。其他可以使用的算法有 DSA、ECDSA、RSA1 和 ED25519。
运行命令后,系统会立即询问您在哪里保存密钥以及为其指定什么名称。只需按 Enter 键即可。这样,密钥就存储在标准位置(/home/user/.ssh/)中,并具有标准名称 id_rsa。
然后系统会询问您是否要输入密码来加密您的私钥。我想在不输入密码的情况下连接到服务器,所以我按 Enter 不输入密码。
最后,系统会要求您重新输入密码。由于您尚未输入密码,请再次按 Enter 键。

按照以下步骤在 ~/.ssh 位置创建非对称密钥。
#3.将 SSH 公钥复制到远程服务器。
用于通过 SSH 配置无密码访问的 SSH 密钥有两种类型:非私有公钥(公钥)和私有密钥(私钥) 。 id_rsa是私钥, id_rsa.pub是公钥。
您必须使用命令 ssh-copy-id 或手动将公钥复制到远程服务器。
SSH 公钥复制命令的一般语法是:
ssh-copy-id username@remote.host.name下面的例子可能会更清楚。
ssh-copy-id root@192.168.1.6 
另一种选择是登录远程服务器并通过运行以下命令在目录 ~/.ssh 中创建一个文本文件:
nano ~/.ssh/authorized_keys将本地计算机上的文件~/.ssh/id_rsa.pub的内容复制到此文件,保存文件,然后退出文本编辑器。

#4.通过 SSH 测试无密码访问
要测试无密码 SSH,请尝试访问您的 SSH 服务器。
$ ssh remote_username@server_ip_address如果一切顺利,您可以立即登录,无需密码。
在 Linux 上禁用 SSH 无密码登录
要禁用 SSH 无密码登录,请使用任何文本编辑器打开 SSH 配置文件。在大多数发行版中,配置文件位于 /etc/ssh/sshd_config 中。
找到显示PermitEmptyPasswords yes的行,并将PermitEmptyPasswords yes更改为PermitEmptyPasswords no 。
保存对配置文件的更改并退出文本编辑器。
重新启动 SSH 以应用更改。
sudo systemctl restart sshd 最后一句话
如果您有许多服务器或需要频繁登录,密码无论多么复杂都是不安全的,并且会使过程效率低下。使用非对称密钥的无密码 ssh 身份验证不仅更方便,而且更安全,可以防止网络钓鱼攻击。
还要考虑对称加密。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

