ssh工作流程及其原理——ssh免密登录

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: ssh工作流程及其原理——ssh免密登录

ssh工作流程及其原理

SSH

SSH(Secure Shell Protocol,安全的壳的协议)它可以通过数据包加密技术将等待传输的数据包加密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。

  • telnet-明文传输-端口号23
  • ssh-加密传输-端口号22

对称加密和非对称加密

  1. 对称加密
    对称加密就是client和server双方使用同一个密钥进行加密和解密,正应如此,它才叫对称加密。
    常见的对称加密算法:DES、AES、3DES等
    优点:算法简单、加解密容易、效率高
    缺点:安全性不高、如果密钥被窃取,密文很容易被破解
  2. 非对称加密
    非对称加密有两个密钥,一个公钥,一个私钥。公钥公开给所有人,但是私钥必须严格保密。公钥和私钥都可以用来加解密,但是公钥加密之后的密文只能由私钥来解密,反之亦是如此。client将通过公钥加密后的密文发给server,server通过私钥来解密密文。彻底解决了对称加密中密钥传输中容易被窃取的问题。
    常见的非对称加密:RSA、ECC
    优点:安全,黑客无法通过拦截获取密钥,也就无法解密密文
    缺点:加密算法复杂,安全性以来算法和密钥,效率低

ssh工作流程

再整个ssh工作流程中,为实现ssh的安全连接,server与client要经历五个阶段:

版本号协商阶段 SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本
密钥和算法协商阶段 SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用的算法
认证阶段 SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证
会话请求阶段 认证通过后,客户端向服务器端发送会话请求
交互会话阶段 会话请求通过后,服务器端和客户端进行信息的交互

版本协商阶段

  1. server端打开端口22,等待client连接
  2. client向server端发起Tcp初始连接请求,Tcp建立连接后,server向client发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号><次协议版本号><软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要为调试使用。
  3. client收到报文后,解析该数据包,如果server的协议版本号比自己的低,且client能支持server的低版本,就使用server的低版本协议号。否则使用自己的协议版本号。
  4. client回复server的第一个报文,包含了client决定使用的协议版本号。server比骄client发过来的协议版本号,决定是否同client一起工作。如果协商成功,则进入密钥和算法协商阶段,否则server断开Tcp连接。

说明:上述的所有报文都采用明文传输

密钥和算法协商阶段

  1. server和client分别发送算法协议报文给对方,报文中包含自己支持的公钥算法列表、加密算法列表、MAC算法列表、压缩算法列表等等
  2. server和client根据对端和本段支持的算法列表得出最终使用的算法
  3. server和client利用DH交换算法、主机密钥对等参数,生成会话密钥和会话ID。

由此,server和client就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加解密,保证了数据传输的安全,再认证阶段,两端会使用会话用于认证过程

会话密钥的生成

  1. client请求连接server,server将公钥发送给client。
  2. server生成会话ID,并将会话ID发送给client
  3. 若client第一次连接到此server,则会将server的公钥数据记录到client的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。client生成会话密钥,并用服务器的公钥加密后,发送给server。
  4. server用自己的私钥将收到的数据解密,获得会话密钥。
  5. server和client都知道了会话密钥,以后的传输都将被会话密钥加密

认证阶段

SSH提供两种认证方法:

  1. 基于口令的认证(password认证):client向server发出password认证请求,将用户名和密码加密后发送给server,server将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。
  2. 基于密钥的认证(publickey认证):client产生一对公共密钥,将公钥保存到将要登录的server上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:client首先将公钥传给server端。server端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥进行对比,如果不相同,则认证失败;否则server生成一段随机字符串,并先后用client公钥和会话密钥对其加密,发送给client。client收到后将解密后的随机字符串用会话密钥发送给server。如果发回的字符串与server端之前生成的一样,则认证通过,否则,认证失败。

ssh免密登录

  1. 本地client生成公私钥
[root@node1 .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:TcWomPIpvx1dCl4AXso8cekYDpPiOJvSvCgAoE+RIMM root@node1
The key's randomart image is:
+---[RSA 3072]----+
|=. . .o o. o.    |
|oE+ ++.*. ...    |
|oo o +**...      |
|= o . =.o+       |
|.O   o .S o .    |
|= + . o. + o     |
|o. . o  o o      |
|o .   .. .       |
|.     ...        |
+----[SHA256]-----+
  1. 可以看见在~/.ssh下生成了两个文件
[root@node1 .ssh]# ll
总用量 8
-rw-------. 1 root root 2590 10月 17 16:17 id_rsa
-rw-r--r--. 1 root root  564 10月 17 16:17 id_rsa.pub
  1. 上传公钥到server
[root@node1 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.133.150
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '192.168.133.150 (192.168.133.150)' can't be established.
ECDSA key fingerprint is SHA256:Sua4JrcWKpvMpdUgK0I93xAHHfHDVo16/eFjC0IjafY.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/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
root@192.168.133.150's password: 
Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'root@192.168.133.150'"
and check to make sure that only the key(s) you wanted were added.
  1. 我们可以在server的~/.ssh下看见
[root@localhost .ssh]# ll
total 4
-rw-------. 1 root root 564 Oct 17 16:20 authorized_keys
  1. 测试客户端免密登录
[root@node1 .ssh]# ssh 192.168.133.150 
????????????????????????????????
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
################################
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Activate the web console with: systemctl enable --now cockpit.socket
This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register
Last login: Mon Oct 17 16:10:42 2022 from 192.168.133.1
[root@localhost ~]#


相关文章
|
2月前
|
JavaScript 应用服务中间件 Linux
【应用服务 App Service】解决无法从Azure门户SSH登录问题
【应用服务 App Service】解决无法从Azure门户SSH登录问题
|
2月前
|
机器学习/深度学习 存储 Linux
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
【机器学习 Azure Machine Learning】使用VS Code登录到Linux VM上 (Remote-SSH), 及可直接通过VS Code编辑VM中的文件
|
2月前
|
安全 Shell Linux
如何禁止某个用户使用ssh登录
本文介绍了五种禁止用户通过SSH登录的方法:1) 修改`/etc/ssh/sshd_config`文件中的`DenyUsers`和`DenyGroups`来阻止特定用户或用户组登录;2) 将用户的默认shell设置为`/usr/sbin/nologin`或`/bin/false`以禁用其SSH访问;3) 利用PAM(可插入认证模块)通过编辑`/etc/security/sshd.conf`来限制登录权限;4) 通过编辑`/etc/hosts.deny`文件拒绝特定用户的SSH访问;5) 锁定或禁用用户账号以阻止所有类型的登录。每种方法都提供了详细的步骤指导。
84 1
|
2月前
|
安全 网络协议 Shell
Github代码仓库SSH配置流程
这篇文章是关于如何配置SSH以安全地连接到GitHub代码仓库的详细指南,包括使用一键脚本简化配置过程、生成SSH密钥对、添加密钥到SSH代理、将公钥添加到GitHub账户以及测试SSH连接的步骤。
43 0
Github代码仓库SSH配置流程
|
2月前
|
存储 安全 测试技术
【超实用却暗藏杀机】sshpass:一键免密SSH登录的神器,为何生产环境却要敬而远之?探秘背后的安全隐患与替代方案!
【8月更文挑战第16天】sshpass 是一款便捷工具,可实现自动化SSH登录,简化脚本中的远程连接流程。通过后台自动处理密码输入,便于执行远程操作,如 `sshpass -p &#39;yourpassword&#39; ssh user@remotehost`。也可结合更多SSH选项使用,例如指定私钥文件。然而,因需明文传递密码,存在较大安全隐患,不适于生产环境;推荐使用公钥认证以增强安全性。
50 4
|
2月前
|
安全 Linux Shell
Linux系统之间实现免密码登录(SSH无密码登录
【8月更文挑战第21天】要在Linux系统间实现SSH免密码登录,需先在源机器生成SSH密钥对,然后将公钥复制到目标机器的`.ssh/authorized_keys`文件中。可通过`ssh-keygen`命令生成密钥,并使用`ssh-copy-id`命令传输公钥。最后测试SSH连接,确保能无密码登录。若目标机器缺少相关目录或文件,需手动创建并设置适当权限。完成这些步骤后,即可实现安全便捷的免密码登录。
53 0
|
2月前
|
Ubuntu Linux 网络安全
在Linux中,如何禁用root用户直接SSH登录?
在Linux中,如何禁用root用户直接SSH登录?
|
2月前
|
存储 安全 Linux
说到Linux安全,SSH限制IP登录绕不开这3种方法!
说到Linux安全,SSH限制IP登录绕不开这3种方法!
|
2月前
|
Linux 网络安全 数据安全/隐私保护
Linux——配置SSH免密登录
Linux——配置SSH免密登录
35 0
|
2月前
|
Linux 网络安全 数据安全/隐私保护
配置ssh免密登录
配置ssh免密登录
101 0