当前位置:网站首页>云服务器基于 SSH 协议实现免密登录
云服务器基于 SSH 协议实现免密登录
2022-08-10 21:51:00 【InfoQ】
SSH 协议实现免密登录
前言
拿到一台新的云服务器,肯定会特别想把玩它。想把玩它,那肯定得先登录它,进入到它的内部,一睹它的风采。
虽然,现在的云服务器厂商都提供了在线登录系统的功能:
该说不说,在线终端这一块来说,阿里云做的是真的不赖,有多种模式,甚至不用登录,可以直接发送命令到服务器去执行:
这个终端的颜值不错,使用体验也不错,非常流畅:
但是通常情况下,我们都是在本地通过一个
支持 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>
然后会提示输入密码,然后回车,就能登录到服务器了:
之后,我们就能在本地的终端工具中,操作远程的服务器了。
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
首先会询问你要把
生成的秘钥放到哪个路径,直接回车,保持默认
即可:
由于我本地已经生成过秘钥了,会询问是否覆盖:
接着,会有两步骤询问是否输入
passphrase,它是私钥的密码,如果设置了之后,之后在和服务器通信时,虽然不再需要输入用户口令,但要输入该私钥(也有办法解决,但不在本文内容之列),
回车跳过
即可:
最后就生成了一对秘钥,私钥名为
id_rsa,公钥名为
id_rsa.pub。
2.将公钥部署到服务器
Linux 系统有关 SSH 协议的内容都放在了
/root/.ssh 目录下,我们来看一下。
我们主要关心
authorized_keys 这个文件,只要
服务器将用户的公钥保存在该文件中,用户就能实现免密登录
了
生成的公钥私钥其实就是两个文本文件,里面的文本内容才是真正有用的东西。
所以现在需要把公钥文件的内容,拷贝到服务器的
authorized_keys 文件中。
方式有很多种,最简单的一种是使用一个
ssh-copy-id 命令。
Windows 系统需要使用
git bash ,CMD 和 Powershell 没有这个命令:
$ ssh-copy-id <用户名>@<服务器 IP>
然后会提示输入密码,之后就能把本机的公钥发送到目标服务器中了:
还会提示我们尝试使用
ssh [email protected]<服务器 IP>的方式登录,确保
key 已经被添加到服务器了。
3.测试
那么我们就试一下免密登录:
$ ssh <用户名>@<服务器 IP>
发现果真,不再提示需要输入密码,而能直接登录成功了:
然后去看一下此时
authorized_keys 文件的内容:
$ cat authorized_keys
上面的是以前的公钥,下面的就是刚刚通过
ssh-copy-id 添加的公钥:
小结
到这里,就能实现
本地机器和远程服务器的一个免密登录访问
了。
现在我们登录服务器,使用是默认的
root用户。登录的方式可以是 ssh 命令 + root 用户名 + 服务器地址。此时如果有不法分子,想要攻击我们的服务器,只需要暴力破解密码,不停的使用 root 用户尝试登录,就最终有可能登录进行系统。可见,如果使用默认的 root 用户名是非常危险的的。
下篇文章,我们来介绍下如何禁止使用 root 用户登录和其他一些安全防范措施。
边栏推荐
- 阿里云张新涛:支持沉浸式体验应用快速落地,阿里云云XR平台发布
- Common interview questions for APP UI automation testing, maybe useful~
- 如何保护 LDAP 目录服务中的用户安全?
- 黑猫带你学Makefile第12篇:常见Makefile问题汇总
- 黑猫带你学Makefile第11篇:当头文件a.h改变时,如何将所有依赖头文件a.h的.c文件都重新编译
- 黑猫带你学Makefile第13篇:Makefile编译问题合集
- 什么是Jmeter?Jmeter使用的原理步骤是什么?
- What is Jmeter? What are the principle steps used by Jmeter?
- 一篇文章教你Pytest快速入门和基础讲解,一定要看
- MySQL高级指令
猜你喜欢
随机推荐
Redis Performance Impact - Asynchronous Mechanisms and Response Latency
Service - DNS forward and reverse domain name resolution service
QT笔记——QT工具uic,rcc,moc,qmake的使用和介绍
阿里云贾朝辉:云XR平台支持彼真科技呈现国风科幻虚拟演唱会
LeetCode-402 - Remove K digits
威纶通触摸屏如何在报警的同时,显示出异常数据的当前值?
2022.8.9 Mock Competition
合并k个已排序的链表
Play RT-THREAD of doxygen
String类的常用方法
shell (text printing tool awk)
爬虫request.get()出现错误
电力系统潮流计算(牛顿-拉夫逊法、高斯-赛德尔法、快速解耦法)(Matlab代码实现)
元宇宙社交应用,靠什么吸引用户「为爱发电」?
谁是边缘计算服务的采购者?是这六个关键角色
边缘与云计算:哪种解决方案更适合您的连接设备?
学会开会|成为有连接感组织的重要技能
SDP
黑猫带你学Makefile第13篇:Makefile编译问题合集
An article to teach you a quick start and basic explanation of Pytest, be sure to read









