云服务器基于 SSH 协议实现免密登录

本文涉及的产品
云服务器 ECS,每月免费额度280元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 本文主要介绍了 SSH 协议通信的原理,以及如何在 Linux 系统中使用 SSH 公钥免密登录。

SSH 协议实现免密登录

前言

拿到一台新的云服务器,肯定会特别想把玩它。想把玩它,那肯定得先登录它,进入到它的内部,一睹它的风采。

虽然,现在的云服务器厂商都提供了在线登录系统的功能:

该说不说,在线终端这一块来说,阿里云做的是真的不赖,有多种模式,甚至不用登录,可以直接发送命令到服务器去执行:

image-20220810203318873

这个终端的颜值不错,使用体验也不错,非常流畅:

image-20220810203358193

但是通常情况下,我们都是在本地通过一个支持 SSH 协议的终端工具,远程登录服务器,来做一些操作。

常用的终端工具有:

  • Xshell:好用,舒服,但是收费软件
  • Putty:简洁,又太过简洁,免费
  • CMD / Powershell:Windows 自带,也能用
  • Git bash:安装 Git 时自带的,挺不错
  • Cmder:代理 CMD 的第三方终端,美观,但是个人体验感觉笨重

选择一个用的顺手的就行。如果是 Windows 系统,强烈推荐使用 git bash 或者其他你用着顺手的终端工具。

SSH 协议

上面说,要使用支持 SSH 协议i的终端来登录服务器。

那么什么是 SSH 协议呢?

SSH 为 Secure Shell 的缩写,即“安全外壳”,由 IETF 的网络小组(Network Working Group)所制定,是 基于公钥的安全应用协议

由 SSH 传输层协议、SSH 用户认证协议以及 SSH 连接协议三个子协议组成,各个子协议分工合作,实现加密、认证、完整性检查等多种安全服务。

其研究目的是以一种渐进的方式增强网络安全,通过现代密码技术,增强网络中非安全的服务,如 FTP、Rlogin、Telnet等,实现服务器认证、用户认证及安全加密网络连接服务。

SSH协议主要有两个版本 SSH1 和 SSH2,SSH1因存在漏洞已停用,目前主要用的是SSH2。

我们只需要抓住两个关键词就行:加密认证

通过 SSH 协议,我们可以使用更安全的网络服务,和以加密的方式进行远程登录

使用 SSH 远程登录服务器

SSH 是一种协议,也是终端工具中的一个命令。

通过 ssh 命令,就能连接并登录到远程服务器上。登录的方式有多种,我们演示几种常用的。

1. 使用用户名和密码登录

打开一个终端工具,输入命令:

$ ssh <用户名>@<服务器 IP>

然后会提示输入密码,然后回车,就能登录到服务器了:

image-20220810204215546

之后,我们就能在本地的终端工具中,操作远程的服务器了。

2. 配置 ssh 公钥实现免密登录

每次要登录服务器都要输入密码,很烦人。所以通常我们都会配置一个 ssh 公钥,从而实现无密登录

免密登录的原理

SSH 协议采用非对称加密,使用一对秘钥进行通信。我们将自己机器的私钥存放在本地,然后将公钥交给服务器,这样我们本地的机器和服务器之间就可以直接使用这个公钥进行通信了(其实并不是纯依赖公钥通信),从而避免了每次都要输入密码的情况。

这是一个大概的流程:

1.客户端生成一对SSH密钥,分为公钥和私钥

2.客户端将自己的公钥发送给服务器,发送到服务器的 authorized_key 文件中

3.服务器端生成一个随机数 R,再使用客户端的公钥对 R 进行加密,记作Pub(R)

4.随后服务器将 Pub(R) 发送给客户端

5.客户端拿到 Pub(R) 之后,就可以使用自己的私钥进行解密,得到随机数 R,再加上当前和服务器会话的sessionKey,加密之后得到一个摘要1,发送给服务器

6.服务器此刻有R,也有 sessionKey,经过同样的摘要算法计算,也得到一个摘要2,二者一对比,发现一样,于是通过了校验,就允许客户端登录服务器了。

这个过程看起来很复杂,但是实际操作起来非常简单,因为这些操作都是在 SSH协议背后自动完成的。我们只需要负责提供私钥即可。

1.本地生成 SSH 秘钥。

使用命令 ssh-keygen 来生成秘钥。

$ ssh-genkey -t rsa

首先会询问你要把生成的秘钥放到哪个路径,直接回车,保持默认即可:

image-20220809001741459

由于我本地已经生成过秘钥了,会询问是否覆盖:

image-20220809001833682

接着,会有两步骤询问是否输入 passphrase,它是私钥的密码,如果设置了之后,之后在和服务器通信时,虽然不再需要输入用户口令,但要输入该私钥(也有办法解决,但不在本文内容之列),回车跳过即可:

image-20220809002101789

最后就生成了一对秘钥,私钥名为 id_rsa,公钥名为 id_rsa.pub

image-20220809002428705

2.将公钥部署到服务器

Linux 系统有关 SSH 协议的内容都放在了 /root/.ssh 目录下,我们来看一下。

image-20220809005636736

我们主要关心 authorized_keys 这个文件,只要服务器将用户的公钥保存在该文件中,用户就能实现免密登录

生成的公钥私钥其实就是两个文本文件,里面的文本内容才是真正有用的东西。

所以现在需要把公钥文件的内容,拷贝到服务器的 authorized_keys 文件中。

方式有很多种,最简单的一种是使用一个 ssh-copy-id 命令。

Windows 系统需要使用 git bash ,CMD 和 Powershell 没有这个命令:

$ ssh-copy-id <用户名>@<服务器 IP>

然后会提示输入密码,之后就能把本机的公钥发送到目标服务器中了:

image-20220809004700265

还会提示我们尝试使用 ssh root@<服务器 IP>的方式登录,确保 key 已经被添加到服务器了。

3.测试

那么我们就试一下免密登录:

$ ssh <用户名>@<服务器 IP>

发现果真,不再提示需要输入密码,而能直接登录成功了:

image-20220810205934747

然后去看一下此时 authorized_keys 文件的内容:

$ cat authorized_keys

上面的是以前的公钥,下面的就是刚刚通过 ssh-copy-id 添加的公钥:

image-20220809005926644

小结

到这里,就能实现本地机器和远程服务器的一个免密登录访问了。

现在我们登录服务器,使用是默认的 root用户。登录的方式可以是 ssh 命令 + root 用户名 + 服务器地址。此时如果有不法分子,想要攻击我们的服务器,只需要暴力破解密码,不停的使用 root 用户尝试登录,就最终有可能登录进行系统。可见,如果使用默认的 root 用户名是非常危险的的。

下篇文章,我们来介绍下如何禁止使用 root 用户登录和其他一些安全防范措施。

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
7天前
|
消息中间件 安全 Unix
SSH配置多台服务器之间的免密登陆以及登陆别名
SSH配置多台服务器之间的免密登陆以及登陆别名
18 1
|
2月前
|
SQL 弹性计算 分布式计算
ECS配置问题之免密登录失败如何解决
ECS配置指的是对阿里云Elastic Compute Service(弹性计算服务)实例的硬件和软件资源进行设置的过程;本合集将详述如何选择合适的ECS配置、调整资源配比以及优化实例性能,以满足不同应用场景的需求。
|
1月前
|
缓存 网络协议 数据可视化
WinSCP下载安装并实现远程SSH本地服务器上传文件
WinSCP下载安装并实现远程SSH本地服务器上传文件
|
1月前
|
安全 算法 Linux
SSH协议的原理和使用:深入剖析SSH协议的原理和使用方法
SSH协议的原理和使用:深入剖析SSH协议的原理和使用方法
51 0
|
1月前
|
安全 Shell 网络安全
如何通过SSH连接云服务器
当你购买云服务器后,你可以通过SSH方式安全的连接到你的云服务器,因为只有你连上云服务器后才能进行服务器相关的配置操作。这里分别介绍了MAC用户和Windows用户如何通过SSH连接云服务器。
216 1
如何通过SSH连接云服务器
|
1月前
|
安全 Linux 网络安全
购了轻服务器,手机登录服务器用root和administrator做登录名,都提示别名已存在,请修改
【2月更文挑战第16天】购了轻服务器,手机登录服务器用root和administrator做登录名,都提示别名已存在,请修改
13 1
|
1月前
|
存储 弹性计算 算法
SSH学习(三)- SSH协议中的Public Key Algorithm
在SSH协议中,有两个地方涉及到公钥算法,分别是: 1. 服务端认证:服务端在进行密钥协商的时候证明自己身份,防止中间人攻击,此时为SSH-TRANS协议发生的事情; 2. 客户端认证:客户端通过PublicKey方式证明自己身份,完成SSH登录认证,此时SSH-USERAUTH发生的事情; 这两种情况下的公钥算法使用的是同一个概念,接下来本文将主要基于PublicKey公钥认证方式,学习对应的内容。
39 1
SSH学习(三)- SSH协议中的Public Key Algorithm
|
1月前
|
网络协议 Ubuntu Linux
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
「远程开发」VSCode使用SSH远程linux服务器 - 公网远程连接
114 0
|
2月前
|
安全 网络协议 Linux
|
2月前
|
安全 Linux 网络安全
手机登录服务器用root和administrator做登录名,都提示别名已存在
【2月更文挑战第5天】手机登录服务器用root和administrator做登录名,都提示别名已存在
30 8

热门文章

最新文章