如何设置无密码的SSH登录

评论 0 浏览 0 2018-06-16

Secure Shell(SSH)是一个加密网络协议,用于客户端和服务器之间的安全连接,支持各种认证机制。两个最流行的机制是基于密码的认证和基于公钥的认证。

在本教程中,我们将向你展示如何设置一个基于SSH密钥的认证,以及如何在不输入密码的情况下连接到你的Linux服务器。

设置SSH无密码登录

要在Linux中设置一个无密码的SSH登录,你需要做的就是生成一个公共认证密钥,并将其附加到远程主机~/.ssh/authorized_keys文件中。

下面的步骤将描述配置无密码的SSH登录的过程:

  1. 检查现有的SSH密钥对。

    在生成一个新的SSH密钥对之前,首先要检查你的客户机上是否已经有一个SSH密钥,因为你不想覆盖你现有的密钥。

    运行下面的ls命令以查看是否存在现有的SSH密钥:

    ls -al ~/.ssh/id_*.pub

    如果存在现有密钥,您可以使用它们并跳过下一步,或者备份旧密钥并生成新密钥。

    如果你看到No such file or directoryno matches found,这意味着你没有SSH密钥,你可以继续进行下一步,并生成一个新的密钥。

  2. 生成一个新的SSH密钥对。

    下面的命令将生成一个新的4096位的SSH密钥对,并将你的电子邮件地址作为注释:

    ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"

    Enter,接受默认的文件位置和文件名:

    输出

    Enter file in which to save the key (/home/yourusername/.ssh/id_rsa):

    接下来,ssh-keygen工具会要求你输入一个安全口令。你是否要使用口令由你决定,如果你选择使用口令,你将得到一个额外的安全层。在大多数情况下,开发人员和系统管理员使用没有口令的SSH,因为他们对完全自动化的过程很有用。如果你不想使用口令就按Enter

    输出

    Enter passphrase (empty for no passphrase):

    整个互动过程看起来是这样的:

    Generate a new SSH key pair

    为了确定SSH密钥已经生成,你可以用以下方法列出你的新的私人和公共密钥:

    ls ~/.ssh/id_*

    输出

    /home/yourusername/.ssh/id_rsa 
    /home/yourusername/.ssh/id_rsa.pub
  3. 拷贝公钥

    现在你已经生成了一个SSH密钥对,为了能够在没有密码的情况下登录到你的服务器,你需要把公钥复制到你要管理的服务器上。

    将你的公钥复制到你的服务器的最简单方法是使用一个叫做ssh-copy-id的命令。在你的本地机器终端键入:

    ssh-copy-id remote_username@server_ip_address

    你将被提示输入remote_username密码:

    输出

    remote_username@server_ip_address's password:

    一旦用户被认证,公钥将被附加到远程用户authorized_keys文件中,连接将被关闭。

    如果由于某种原因,ssh-copy-id工具在你的本地计算机上不可用,你可以使用下面的命令来复制公钥:

    cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
  4. 使用SSH密钥登录到你的服务器上

    在完成上述步骤后,你应该能够登录到远程服务器,而不会被提示输入密码。

    要测试它,只需尝试通过SSH登录到你的服务器上:

    ssh remote_username@server_ip_address

    如果一切顺利,你将会立即被登录。

禁用SSH密码验证功能

为了给你的服务器增加一个额外的安全层,你可以禁用SSH的密码验证。

在禁用SSH密码认证之前,请确保你可以在没有密码的情况下登录你的服务器,而且你登录的用户有sudo权限。

下面的教程描述了如何配置sudo访问权限:

  1. 用SSH密钥登录到你的远程服务器,可以是具有sudo权限的用户,也可以是root:

    ssh sudo_user@server_ip_address
  2. 打开SSH配置文件/etc/ssh/sshd_config,搜索以下指令,并按以下方式进行修改:

    /etc/ssh/sshd_config
    PasswordAuthentication no
    ChallengeResponseAuthentication no
    UsePAM no

    一旦你完成后,保存文件并重新启动SSH服务。

    在Ubuntu或Debian服务器上,运行下面的命令:

    sudo systemctl restart ssh

    在CentOS或Fedora服务器上,运行下面的命令:

    sudo systemctl restart sshd

总结

在本教程中,你已经学会了如何设置一个基于SSH密钥的认证,允许你在不提供用户密码的情况下登录到远程服务器。你可以为多个远程服务添加相同的密钥。

我们还向你展示了如何禁用SSH密码认证,并为你的服务器增加一个额外的安全保护层。

如果你有任何问题或反馈意见,请随时留言。

最后更新2023-06-14
0 个评论
标签