如何在 Linux 服务器上配置基于 SSH 密钥的身份验证

这篇具有很好参考价值的文章主要介绍了如何在 Linux 服务器上配置基于 SSH 密钥的身份验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。

如何在 Linux 服务器上配置基于 SSH 密钥的身份验证

介绍

SSH是一种加密协议,用于管理服务器并与服务器通信。虽然登录 SSH 服务器的方式有多种,下面我们将重点关注设置 SSH 密钥。

SSH 密钥提供了一种极其安全的登录服务器的方式。

SSH 密钥如何工作?

SSH 服务器可以使用多种不同的方法对客户端进行身份验证。其中最基本的是密码身份验证,它易于使用,但不是最安全的。

尽管密码以安全的方式发送到服务器,但它们通常不够复杂或不够长,不足以抵御重复、持续的攻击。现代处理能力与自动化脚本相结合,暴力破解受密码保护的帐户很常见。尽管还有其他方法可以增加额外的安全性(fail2ban等等),但 SSH 密钥被证明是一种可靠且安全的替代方案。

SSH 密钥对是两个加密安全密钥,可用于向 SSH 服务器验证客户端的身份。每个密钥对由公钥和私钥组成。

私钥由客户保留,并应绝对保密。对私钥的任何泄露都将允许攻击者登录到配置有关联公钥的服务器,而无需进行额外的身份验证。作为额外的预防措施,可以使用密码在磁盘上对密钥进行加密。

关联的公钥可以自由共享,不会产生任何负面后果。公钥可用于加密只有私钥才能解密的消息。该属性被用作使用密钥对进行身份验证的一种方式。

公钥已上传到我们希望能够使用 SSH 登录的远程服务器。该密钥被添加到我们将登录的用户帐户内的一个特殊文件中,如:~/.ssh/authorized_keys.

当客户端尝试使用 SSH 密钥进行身份验证时,服务器可以测试客户端是否拥有私钥。如果客户端可以证明它拥有私钥,则会生成 shell 会话或执行请求的命令。

第 1 步 — 创建 SSH 密钥

配置服务器的 SSH 密钥身份验证的第一步是在本地计算机上生成 SSH 密钥对。

为此,我们可以使用一个名为ssh-keygen 的特殊实用程序,它包含在标准 OpenSSH 工具套件中。默认情况下,这将创建 3072 位 RSA 密钥对。

在本地计算机上,通过键入以下内容生成 SSH 密钥对:

ssh-keygen
OutputGenerating public/private rsa key pair.
Enter file in which to save the key (/home/username/.ssh/id_rsa):

该实用程序将提示选择将生成的密钥的位置。默认情况下,密钥将存储在用户主目录中的~/.ssh目录中。私钥将被id_rsa调用,关联的公钥将被id_rsa.pub调用。

通常,在此阶段最好坚持使用默认位置。这样做将允许 SSH 客户端在尝试进行身份验证时自动找到 SSH 密钥。如果想选择非标准路径,请立即输入,否则,请按ENTER接受默认值。

如果之前已生成过 SSH 密钥,可能会看到如下所示的提示:

Output/home/username/.ssh/id_rsa already exists.
Overwrite (y/n)?

如果选择覆盖磁盘上的密钥,将无法再使用以前的密钥进行身份验证。选择“是”时要非常小心,因为这是一个无法逆转的破坏性过程。

OutputCreated directory '/home/username/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

接下来,系统将提示输入密钥的密码。这是一个可选密码,可用于加密磁盘上的私钥文件。

既然要输密码了,那么为什么还要用SSH密钥?原因如下:

  • SSH 私钥(可以受密码保护的部分)永远不会在网络上公开。该密码仅用于解密本地计算机上的密钥。这意味着无法针对密码进行基于网络的暴力破解。
  • 私钥保存在受限制的目录中。SSH 客户端将无法识别未保存在受限目录中的私钥。密钥本身还必须具有受限权限(仅所有者可以读取和写入)。这意味着系统上的其他用户无法窥探。
  • 任何希望破解 SSH 私钥密码的攻击者都必须已经有权访问系统。这意味着他们已经有权访问用户帐户或根帐户。如果处于这种情况,密码可以防止攻击者立即登录我们的其他服务器。这样我们就有时间创建和实施新的 SSH 密钥对并删除受损密钥的访问权限。

由于私钥永远不会暴露于网络并通过文件权限进行保护,因此除自己(和根用户)之外的任何人都不应访问此文件。如果这些条件受到损害,密码可作为额外的保护层。

密码是可选的添加项。如果我们输入一个,则每次使用此密钥时都必须提供它(除非正在运行存储解密密钥的 SSH 代理软件)。这里建议使用密码,但如果不想设置密码,可以按ENTER绕过此提示。

OutputYour identification has been saved in /home/username/.ssh/id_rsa.
Your public key has been saved in /home/username/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:CAjsV9M/tt5skazroTc1ZRGCBz+kGtYUIPhRvvZJYBs username@hostname
The key's randomart image is:
+---[RSA 3072]----+
|o   ..oo.++o ..  |
| o o +o.o.+...   |
|. . + oE.o.o  .  |
| . . oo.B+  .o   |
|  .   .=S.+ +    |
|      . o..*     |
|        .+= o    |
|        .=.+     |
|       .oo+      |
+----[SHA256]-----+

到这里我们已经拥有可用于进行身份验证的公钥和私钥。下一步是将公钥放在服务器上,以便可以使用 SSH 密钥身份验证登录。

第 2 步 — 将 SSH 公钥复制到服务器

有多种方法可以将公钥上传到远程 SSH 服务器。我们使用的方法很大程度上取决于可用的工具以及当前配置的详细信息。

以下方法都产生相同的最终结果。首先描述最简单、最自动化的方法,随后的方法都需要额外的手动步骤。

使用复制公钥ssh-copy-id

将公钥复制到现有服务器的最简单方法是使用名为ssh-copy-id 的实用程序。由于其简单性,如果可用,建议使用此方法。

ssh-copy-id工具包含在许多发行版的 OpenSSH 软件包中,因此本地系统上可能已提供该工具。要使此方法发挥作用,当前必须具有对服务器的基于密码的 SSH 访问权限。

要使用该实用程序,需要指定要连接的远程主机,以及具有基于密码的 SSH 访问权限的用户帐户。

输入:

ssh-copy-id username@remote_host

会看到这样的消息:

OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

这意味着本地计算机无法识别远程主机。这将在第一次连接到新主机时发生。键入yes并按ENTER继续。

接下来,该实用程序将扫描本地帐户以查找我们之前创建的密钥。当它找到密钥时,它会提示输入远程用户帐户的密码:

Output/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
username@203.0.113.1's password:

输入密码(出于安全目的,输入内容不会显示)并按ENTER。该实用程序将使用提供的密码连接到远程主机上的帐户。然后,它会将密钥内容复制到远程帐户主目录中名为~/.ssh``authorized_keys~/.ssh/id_rsa.pub文件中。

我们将看到如下所示的输出:

OutputNumber of key(s) added: 1

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

此时,id_rsa.pub密钥已上传到远程帐户。

使用 SSH 复制公钥

如果没有ssh-copy-id可用的帐户,但可以通过基于密码的 SSH 访问服务器上的帐户,则可以使用传统的 SSH 方法上传密钥。

我们可以通过在本地计算机上输出公共 SSH 密钥的内容并通过 SSH 连接将其传输到远程服务器来实现此目的。另一方面,我们可以确保该~/.ssh目录存在于我们正在使用的帐户下,然后将我们通过管道传输的内容输出到authorized_keys该目录中调用的文件中。

我们将使用>>重定向符号附加内容而不是覆盖它。这将使我们能够添加密钥而不会破坏之前添加的密钥。

完整的命令如下所示:

cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

可能会看到这样的消息:

OutputThe authenticity of host '203.0.113.1 (203.0.113.1)' can't be established.
ECDSA key fingerprint is fd:fd:d4:f9:77:fe:73:84:e1:55:00:ad:d6:6d:22:fe.
Are you sure you want to continue connecting (yes/no)? yes

这说明本地计算机无法识别远程主机。这将在第一次连接到新主机时发生。键入yes并按ENTER继续。

之后,系统将提示输入尝试连接的帐户的密码:

Outputusername@203.0.113.1's password:

输入密码后,密钥内容将被复制到远程用户帐户的文件id_rsa.pub末尾。

第 3 步 — 使用 SSH 密钥向服务器进行身份验证

如果已成功完成上述过程之一,则无需远程帐户密码即可登录远程主机。

登录就行,没啥说的:文章来源地址https://www.toymoban.com/news/detail-819051.html

ssh username@remote_host

到了这里,关于如何在 Linux 服务器上配置基于 SSH 密钥的身份验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Xshell “所选的用户密钥未在远程主机上注册,请再试一次”SSH 登录远程linux服务器(良心整理)

    这个问题真的要把我逼疯了,为什么呢? 为了解决这个问题,我搜遍了CSDN、知乎、简书上的解决方案,CSDN上的回答真的是水文太多,相互抄,抄就抄吧,只抄一半。这让真正想解决问题的人走了太多的弯路。 也不知道是谁写的原文,可能作者解决了,但是写的很不清楚,也

    2023年04月15日
    浏览(20)
  • ubuntu22.04 服务器 SSH 密钥登录失败

    SSH密钥登录,是将SSH公钥写入服务端的 ~/.ssh/authorized_keys 文件中。 今天装了ubuntu22.04的系统,按照以往操作,在服务端配置了SSH公钥之后,发现竟然无法登录。 首先查看OpenSSH版本: 查看 /var/log/auth.log 文件,发现有如下错误信息: 通过错误信息来看,填入 authorized_keys 文件的

    2024年01月18日
    浏览(37)
  • Termux的ssh使用方式(连接云服务器,ssh密钥登录和Termux互联)

     Termux作为强大的终端模拟软件,通过ssh可以轻松的连接到云服务器上,这里以连接阿里云服务器为例  一般在服务器运营商上购买的服务器都开启了远程连接服务。先在ternux上安装openssh。  安装完成后,在服务器控制台找到需要连接的服务器的ip地址,以47.115.217.154为例,

    2024年02月06日
    浏览(30)
  • Linux Debian11服务器安装SSH,创建新用户并允许SSH远程登录,及SSH安全登录配置!

    在Debian 11服务器上安装SSH并创建新用户允许SSH远程登录的步骤如下: 步骤1:安装SSH 为了安装SSH服务器,您需要以root用户或具有sudo特权的用户身份登录到您的Debian 11服务器。 在终端中执行以下命令来安装SSH服务器: 步骤2:创建新用户 要创建一个新用户,您可以使用  add

    2024年02月12日
    浏览(29)
  • Linux Debian11服务器安装SSH,创建新用户并允许SSH远程登录,及SSH安全登录配置

    一、在 Debian 中添加 sudo 用户 1.创建新用户 首先,要创建用户,当前用户必须是 root 用户或者 sudo 用户。 使用下面adduser 命令创建一个用户名为test的sudo用户,按照提示输入密码,使用 adduser 命令,还会创建用户的主目录。 sudo adduser test 2.将用户成为 sudo 用户 创建test用户后,

    2024年02月05日
    浏览(45)
  • window11安装SSH和VScode并远程连接Linux服务器进行配置

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 前段时间用激光雷达采集了一些点云数据,需要连接实验室服务器对数据进行处理,我大该花了一下午的时间完成了配置。网上相关的教程有很多,但是有很大一部分比较陈旧,存在着一些问题,本文总

    2024年02月05日
    浏览(33)
  • 如何在IntelliJ IDEA中配置SSH服务器开发环境并实现固定地址远程连接

    本文主要介绍如何在IDEA中设置远程连接服务器开发环境,并结合Cpolar内网穿透工具实现无公网远程连接,然后实现远程Linux环境进行开发。 IDEA的远程开发功能,可以将本地的编译、构建、调试、运行等工作都放在远程服务器上执行,而本地仅运行客户端软件进行常规的开发

    2024年02月02日
    浏览(31)
  • 如何修改远程端服务器密钥

    一段时间没改密码后,远程就会自动提示Ctrl+Alt+End键修改密码。但我电脑是笔记本,没有end键。打开屏幕键盘按这三个键也没用。 打开远程 1、 远程端 WIN+C 输入osk 可以发现打开了屏幕键盘 2、电脑键盘同时按住Ctrl+Alt(若自身电脑同时按这三个键会触发自身电脑设置而不是远

    2024年02月21日
    浏览(21)
  • Linux服务器配置SSH免密码登录后,登录仍提示输入密码(一次真实的问题排查解决记录)

    我们知道两台Linux服务器机器之间如果使用ssh命令登录或scp/rsync命令传输文件每一次都需要输入用户名相对应的密码,如果要免密码,则需要对两台Linux服务器机器之间进行SSH互信。 虽然这是废话,也希望大家了解一下。 SSH(Secure Shell)是一种安全的传输协议,它可以让Lin

    2024年02月09日
    浏览(32)
  • 如何在Linux机器上使用ssh远程连接Windows Server服务器并使用rsync同步文件

       当前在研究goploy自动化开源部署工具,该工具部署在linux机器上,而要部署服务的目标服务器有一部分是windows server服务器,goploy自动化部署,使用rsync部署方式,底层依赖于ssh远程连接目标服务器,所以,要实现自动化部署,必须先实现ssh远程连接目标windows server服务器

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包