网络安全——SSH的两种远程登录方法详解

简介: 最近在打靶场的过程中发现有时候SSH无需密码就可以直接登陆,这确实是触及到我的盲区了,上网查了一下才知道这原来是ssh的秘钥登录,花了一整天才弄懂,所以写下这篇博客,希望能帮助到大家

作者名:Demo不是emo  

主页面链接:**主页传送门**  博主简介:一个普通的大二学生,在CSDN写博客主要是为了分享自己的学习历程,学习方法,总结的经验等等,希望对大家有帮助  座右铭:不要让时代的悲哀成为你的悲哀  专研方向:网络安全,web安全

每日emo:以为时间会冲淡一切,但你还是会出现在我的梦里

最近在打靶场的过程中发现有时候SSH无需密码就可以直接登陆,这确实是触及到我的盲区了,上网查了一下才知道这原来是ssh的秘钥登录,花了一整天才弄懂,所以写下这篇博客,希望能帮助到大家

目录

一:SSH口令登录

【1】登录原理

【2】使用教程

1.建立连接

2.输入密码

3.成功连接

【3】缺点总结

1.安全性

2.繁琐性

二:SSH秘钥登录

【1】登录原理

【2】使用教程

1.生成密钥对

2.投递公钥到服务端

三:SSH最简单登录方法——别名配置


【1】登录原理

SSH服务默认登录方式为口令登录,也是我们平时最常用的,原理如下

  • 1.客户端向服务端发起请求
  • 2.服务端收到请求将自己生成的公钥返回给客户端
  • 3.客户端用返回来的公钥加密自己的登录密码,发送给服务端
  • 4.服务端用自己的私钥解密,并验证密码是否正确,如果正确,允许登录

可以看到整个流程存在四个步骤 ,下面给大家看看详细步骤

【2】使用教程

SSH的基本使用方法是:

ssh user@remote -p port

  • user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
  • port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22(ssh的默认端口)

所以,SSH口令登录的前提就是知道目标的用户名地址和SSH服务的端口,缺一不可

1.建立连接

举例:假如我正在使用kali机器做渗透测试,探测到目标的地址是

开启了22端口,并且是SSH服务,还知道了目标机器上的用户名为Tom,密码为123456,就可以用SSH远程登良路目标机器,指令如下

ssh tom@172.21.70.110 -p 22

:这里的-p 22也可以不要,因为-p 22是默认选项,如果是其他端口的ssh服务就需要用-p来指定其他的端口了

2.输入密码

输入上面的指令后页面如下,提示输入密码,这里密码的输入是隐藏输入(并不会显示),输入密码后直接回车就好

因为我已经连接过很多次了,但是第一次连接会弹出来一段话,意思是该远程主机的真实性无法确定,确定想要继续连接吗? ,直接输入yes即可

3.成功连接

输入密码后页面如下图

可以看到这里我们成功用SSH远程登录了目标的tom用户,这就是SSH口令登录的大致内容了

【3】缺点总结

1.安全性

整个验证机制是没什么问题的,但是当遇到 中间人攻击这种机制的安全性便会遭到破坏,什么是 **中间人攻击**?

  • 客户端向服务端发起请求
  • 攻击人截获请求,并向客户端返回自己的公钥
  • 客户端用公钥加密登录密码并返回
  • 攻击人用自己的私钥解密,获得服务器的登录密码

2.繁琐性

每次登录目标主机都要输入密码,短的密码不安全,长的密码又不好记,用户体验感较差

为了解决上面这几个问题,于是更新,更安全的方法随之而生,那就是SSH秘钥登录,下面我们来看看

【1】登录原理

很多人可能都听过秘钥登录,知道它可以通过SSH在无需密码的情况下登录目标机器上的用户,那这个流程是怎样的呢?我们来详细看看

  • 1.客户端自己生成密钥对,事先将公钥上传存储到远程服务器上,私钥自己保管
  • 2.客户端发起登录请求
  • 3.服务器发一串随机字符串给客户端
  • 4.客户端用自己的私钥加密随机字符串,返回给服务端
  • 5.服务端用事先存储好的公钥解密,确认字符串是原来发出的字符串,便允许登录

可以看到整个流程存在五个步骤 ,下面给大家看看详细步骤

【2】使用教程

1.生成密钥对

ssh-keygen -t rsa  

然后根据提示一步步的按回车键即可(总共三个),页面如下

这里为什么连续按三个回车就可以了呢,我们来看看这三个回车对应了什么

第一个回车:让我们输入一个目录路径来保存生成的密钥对,默认为/root/.ssh,回车                       代表直接默认,也可以自己输入一个路径来保存

第二个回车:让我们设置私钥密码,如果设置了私钥密码,每次使用 SSH 进行操作都需要                          输入私钥密码。这里直接空格就是密码为空,这样每次使用就不需要输入密码

第三个回车: 这个就是单纯的再次输入私钥密码(就是一个确认密码),我们本来就是想设                       置密码,所以还是至二级回车即可

像我上面那样的话密钥对就已经生成了,我们到自己设置的秘钥对路径下看看,如果没有设置路径的话就是默认路径/root/.ssh,查询结果如下

可以看到在/root/.ssh路径下生成了密钥对(即公钥和私钥),其中id_rsa文件就是私钥,id_rsa.pub文件就是公钥

2.投递公钥到服务端

上面我们已经生成了密钥对,按照步骤需要将密钥对中的公钥保存到目标机器的~/.ssh/authorized_key文件中,这里给大家介绍三种投递方式,但都是基于目标开启了ssh服务知道目标账密的前提下

注意:~ 表示代码主目录,也就是我们想用SSH登录的用户目录。

第一种:

这是最简单也是最常用的方式,需要ssh-copy-id,但是一般linux都自带这个

ssh-copy-id user@remote -p port

  • user 是你在远程机器上的用户名,如果不指定的话默认为当前用户
  • remote 是远程机器的地址,可以是 IP,域名,或者是后面会提到的别名
  • port 是 SSH Server 监听的端口,如果不指定的话就为默认值 22(ssh的默认端口)

实例: 这里我直接把上面生成的密钥对中的公钥上传到目标机器的tom用户目录

可以看到在这里已经成功上传了,因为这是我们自己搭建的环境,我们也可以去目标机器看看~/.ssh上有没有我们上传的公钥文件,也就是authorized_keys文件

可以看到目标路径下已经有了,现在我们再用kali来登录试试

可以看到已经成功登录了,而且并没有提示我们输入密码

第二种:

没有 ssh-copy-id 的情况下(比如在 Windows 上),也是可以轻松做到这件事的。用命令的话也是一句话搞定

ssh user@remote -p port 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub

这句话的意思是,在远端执行新建 .ssh 文件夹,并把本地的 ~/.ssh/id_rsa.pub (也就是公钥)复制到远端的 .ssh/authorized_keys文件中,因为windows用得少,这里就不实操举例了,有兴趣的同学可以试试

第三种:

咳咳,这个其实也不算方法,就是两台电脑均可控的情况下,手动把本地的 ~/.ssh/id_rsa.pub复制到目标机器的~/.ssh/authorized_keys文件

每次都输入 ssh user@remote -p port,时间久了也会觉得很麻烦(不要觉得我懒哈哈),特别是当 user, remoteport 都得输入,而且还不好记忆的时候。配置别名可以让我们进一步偷懒(咳咳)。

比如我想用 ssh  host1来替代上面这么一长串,那么在 ~/.ssh/config文件里面追加以下内容:

举例:  先在本地的~/.ssh里面创建一个名为config的文件,里面代码如下:

现在我们就可以尝试使用ssh host1来登录了,如下

可以看到,也能成功登录,并且与刚才配置的秘钥登录配合,不用输入密码,目标信息不用记,我说这是ssh最简单的登录方法没问题吧。

注意:这个别名并不是必须配置公钥登录,这里如果没有配置秘钥登录也可以使用别名,只是登    录时需要输入密码而已


好了今天的SSH使用技巧分享就到这里了,如果有什么疑问或者想讨论的都可以私信我或者发布评论,看到都会回哦(如果有什么网安方面的小问题也可以来讨论讨论),最后,希望今天的内容能对大家有所帮助,感谢大家的阅读,再见啦!

相关文章
|
4月前
|
机器学习/深度学习 算法 调度
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
14种智能算法优化BP神经网络(14种方法)实现数据预测分类研究(Matlab代码实现)
446 0
|
4月前
|
网络安全 开发工具 git
配置本地环境以管理Git多账户SSH连接的方法
通过以上步駟设置后, 您可以轻松管理多個 Git 账户并且根据不同项目需求切换 SSH 密匙进行版本控制操作。
368 20
|
3月前
|
机器学习/深度学习 数据采集 边缘计算
基于灰色神经网络的预测方法
基于灰色神经网络的预测方法
215 0
|
4月前
|
算法 Python
【EI复现】考虑网络动态重构的分布式电源选址定容优化方法(Matlab代码实现)
【EI复现】考虑网络动态重构的分布式电源选址定容优化方法(Matlab代码实现)
114 0
|
5月前
|
机器学习/深度学习 数据采集 TensorFlow
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
基于CNN-GRU-Attention混合神经网络的负荷预测方法(Python代码实现)
254 0
|
6月前
|
存储 Linux 容器
【Container App】在容器中抓取网络包的方法
本文介绍在Azure Container App中安装tcpdump抓取网络包,并通过Storage Account上传抓包文件的方法。内容包括使用curl和nc测试外部接口连通性、长Ping端口、安装tcpdump、抓取网络包、以及通过crul命令上传文件至Azure Storage。适用于需要分析网络请求和排查网络问题的场景。
221 1
|
7月前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
392 14
|
6月前
|
机器学习/深度学习 边缘计算 算法
基于BP神经网络的电池容量预测方法研究
基于BP神经网络的电池容量预测方法研究
|
监控 安全 网络安全
深入解析PDCERF:网络安全应急响应的六阶段方法
PDCERF是网络安全应急响应的六阶段方法,涵盖准备、检测、抑制、根除、恢复和跟进。本文详细解析各阶段目标与操作步骤,并附图例,助读者理解与应用,提升组织应对安全事件的能力。
1880 89
|
8月前
计算网络号的直接方法
子网掩码用于区分IP地址中的网络部分和主机部分,连续的“1”表示网络位,“0”表示主机位。例如,255.255.255.0 的二进制为 11111111.11111111.11111111.00000000,前24位是网络部分。通过子网掩码可提取网络号,如 IP 192.168.1.10 与子网掩码 255.255.255.0 的网络号为 192.168.1.0。此外,文档还介绍了十进制与二进制间的转换方法,帮助理解IP地址的组成与计算。
605 11