SSH

  Windows Linux MacOS Android IOS
           
           
           

https://www.ssh.com

http://www.openssh.com

SH验证原理详解
SSH验证方式主要有以下两种:
   1.基于口令的验证
   2.基于密钥的验证

SSH1 SSH2俩个主要版本特点与区别

SSH(Secure SHell)到目前为止有两个不兼容的版本——SSH1和SSH2。

SSH1又分为1.3和 1.5两个版本。SSH1采用DES、3DES、Blowfish和RC4等对称加密算法保护数据安全传输,而对称加密算法的密钥是通过非对称加密算法(RSA)来完成交换的。SSH1使用循环冗余校验码(CRC)来保证数据的完整性,但是后来发现这种方法有缺陷。

SSH2避免了RSA的专利问题,并修补了CRC的缺陷。SSH2用数字签名算法(DSA)和Diffie-Hellman(DH)算法代替RSA来完成对称密钥的交换,用消息证实代码(HMAC)来代替CRC。同时SSH2增加了AES和Twofish等对称加密算法。

ssh的发展历程与基本原理

目录

  • 一、ssh是什么
  • 二、ssh的发展历史
    • 1. 1.x版本
    • 2. 2.x版本
    • 3. 1.99版本
    • 4. OpenSSH and OSSH
  • 三、ssh的主要特性
    • 1. 加密
    • 2. 通信的完整性
    • 3. 认证
    • 4. 授权
    • 5. 转发
  • 四、SSH 基本框架
  • 五、ssh的加密
    • 1. ssh加密方式
    • 2. ssh中的key
  • 六、安全连接的建立过程
    • 1. 协议协商阶段
    • 2. 服务端认证阶段
    • 3. 客户端认证阶段
    • 4. 数据传输阶段
  • 七、总结
  • 八、参考

回到顶部

一、ssh是什么

SSH(Secure Shell)是一个提供数据通信安全、远程登录、远程指令执行等功能的安全网络协议,最初提出目的是替代非安全的Telnet、rsh、rexec等远程Shell协议。之后SSH发展了两个大版本SSH-1SSH-2

回到顶部

二、ssh的发展历史

1. 1.x版本

1995年,芬兰赫尔辛基理工大学的研究员Tatu Ylönen设计了ssh协议的第一个版本(现称SSH-1),目标是取代早期的rlogin, TELNET, ftp和rsh这些不安全的协议。同年七月,他以免费软件的形式发布了这个协议的一个实现,并迅速流行起来。

1995年12月,Ylonen创建了SSH Communications Security来发展和商业化SSH,SSH软件的原始版本使用了各种免费软件,如Gun libgmp,但是后来由SSH Communications Security发布的版本逐渐演化为私有软件。

2. 2.x版本

“Secsh”,IETF工作小组的官方互联网工程任务组,负责SSH协议的第二版本。在2006年,他们发布了SSH协议修订版,即SSH-2,并被采纳为标准。该版本与SSH-1不兼容,但在安全性和特性方面都优于SSH-1。更好的安全性,例如,通过Diffie-Hellman密钥交换和通过信息认证码进行强大的完整性检查。SSH-2的新特性,增加了在单个SSH连接上运行任意数量的shell会话的能力。由于SSH-2比SSH-1更有优势而且受欢迎,一些实现如Lsh和Dropbear仅支持SSH-2协议。

3. 1.99版本

在2006年1月,在2.1版本建立之后,RFC 4253指定一个支持ssh2.0以及兼容之前版本的SSH服务的协议版本为1.99。这不是一个实际的版本,而是一种识别向后兼容性的方法。

4. OpenSSH and OSSH

早在1999年,很多开发人员都很想要一个可用的免费版本,他们找到了SSH源程序的1.2.12发布版本,这是它在开放源码许可下发布的最后一个版本,Bjorn Gronvall的OSSH就是后来以这个为基础发展出来的。不久,OpenBSD开发人员在Gronvall的代码的基础上开了一个分支,并对其进行了大量的工作后,创建了OpenSSH,这是由2.6版本的OpenBSD发布的。在这个版本中,一个“可移植性”分支被创建了,目的是让OpenSSH能在其他操作系统中使用。

到了2005年,OpenSSH已经是最流行的SSH实现了,没有之一,在很多操作系统中都默认安装OpenSSH。与此同时,OSSH却过时了。OpenSSH一直在维护并支持SSH-2协议,在7.6版本的OpenSSH代码库中,去除了对SSH-1的支持。

回到顶部

三、ssh的主要特性

1. 加密

避免数据内容泄漏

2. 通信的完整性

避免数据被篡改,以及发送或接受地址伪装(检查数据是否被篡改,数据是否来自发送者而非攻击者) SSH-2 通过 MD5 和 SHA-1 实现该功能,SSH-1 使用 CRC-32

3. 认证

识别数据发送者和接收者身份 客户端验证SSH服务端的身份:防止攻击者仿冒SSH服务端身份,避免中间人攻击和重定向请求的攻击;OpenSSH 通过在 know-hosts 中存储主机名和 host key 对服务端身份进行认证 服务端验证请求者身份:提供安全性较弱的用户密码方式,和安全性更强的 per-user public-key signatures;此外SSH还支持与第三方安全服务系统的集成,如 Kerberos等

4. 授权

用户访问控制

5. 转发

可以通过SSH为Telnet、FTP等提供通信安全保障,支持三种类型的转发操作:Port Forwarding,X Forwarding,Agent Forwarding

回到顶部

四、SSH 基本框架

SSH协议框架中最主要的部分是三个协议:

  • 传输层协议(The Transport Layer Protocol)提供服务器认证,数据机密性,信息完整性 等的支持;
  • 用户认证协议(The User Authentication Protocol) 则为服务器提供客户端的身份鉴别;
  • 连接协议(The Connection Protocol) 将加密的信息隧道复用成若干个逻辑通道,提供给更高层的应用协议使用; 各种高层应用协议可以相对地独立于SSH基本体系之外,并依靠这个基本框架,通过连接协议使用SSH的安全机制。
      
    同时SSH协议框架中还为许多高层的网络安全应用协议提供扩展的支持。它们之间的层次关系可以用如下图来表示:

回到顶部

五、ssh的加密

1. ssh加密方式

SSH从安全和性能两方面综合考虑,结合使用了 Public Key/Private key(公钥/私钥) 和 Secret Key(密钥)。

  • Public Key/Private key:非对称加密,安全,但效率低,不适合大规模进行数据的加密和解密操作
  • Secret Key:对称机密,高效,但安全性相对较低,Key的分发尤其不方便

对密码学基础知识和数字签名了解,可以参考阮一峰的博文

  • 密码学笔记
  • 数字签名是什么

2. ssh中的key

名称 生命周期 创建 类型 描述
Host Key 持久化 服务端

Public Key

Host Key是服务器用来证明自己身份的一个永久性的非对称密钥
User Key 持久化 用户 Public Key User Key 是客户端用来证明用户身份的一个永久性的非对称密钥(一个用户可以有多个密钥/身份标识)
Server Key 默认为1小时 服务端 Public Key Server Key 是SSH-1协议中使用的一个临时的非对称密钥,每隔一定的间隔(默认是一个小时)都会在服务器重新生成。用于对Session Key进行加密(仅SSH-1协议有,SSH-2对其进行了增强,这里Server Key作为一个概念便于在流程中进行描述)
Session Key 客户端 会话(Session) Secret Key Session Key是一个随机生成的对称密钥,用户SSH客户端和服务器之间的通信进行加密,会话结束时,被销毁

ssh框架图:

回到顶部

六、安全连接的建立过程

SSH处理过程可以分解成几个主要阶段:

  • 协议协商阶段
  • 服务端认证阶段
  • 客户端认证阶段
  • 数据传输阶段

每个阶段均涉及到客户端与服务端的多次交互,通过这些交互过程完成包括证书传输、算法协商、通道加密等过程。

1. 协议协商阶段

1)服务端打开服务端口(默认为22),等待客户端连接

2)客户端发起TCP连接请求,服务端接收到该请求后,向客户端发送包括SSH协议版本信息

3)客户端接根据该版本信息与自己的版本,决定将要使用的SSH版本,并向服务端发送选用的SSH版本信息

4)服务端检查是否支持客户端的决定使用的SSH版本

至此,双方完成协议协商。如果该过程中,客户端或服务端发送SSH版本无法兼容,任何一方都可以断开连接。

2. 服务端认证阶段

完成协议协商阶段后,客户端与服务端已经建立明文的通信通道,之后进入服务端认证阶段。

SSH协议中没有明确的服务端认证过程,而通过一系列的服务端与客户端的交互来确定服务端的身份,该过程还会完成Host Key、User Key、Session Key等在客户端与服务端之间的传输。

1)建立连接后,服务端向客户端发送:

  • Host Key:用于认证服务端的身份
  • Server Key:用于帮助建立安全的数据传输通道
  • 8字节的随机数,即检测字节(check bytes):客户端通过在下一次响应中包含该随机数,防止IP地址欺诈
  • 服务端支持的加密算法、压缩方式和认证方式

这个时候,客户端和服务端使用Host Key、Server Key和检测字节生成一个128位的MD5值,作为此次会话的session id

2)客户端在接收到服务端Host Key后,会检查自己的knows host数据库中(一般为~/.ssh/know_hosts文件),是否已经包含当前服务端的Host Key,如果有则继续下一步;如果没有或包含当前服务端的其他Host Key,则由用户决定是否信任该服务端,或终止当前连接。

如果客户端拒绝接受这个主机密钥,那么连接就中止了。否则,继续。

3)客户端向服务端发送session Key

出于性能考虑,SSH采用对称加密(Secret Key),对实际通信内容进行加密,即Session Key。因此Session Key的安全尤为重要,一旦Session Key泄漏给攻击者,那所有的通信数据都可能被攻击者截获。由于当前通道还是采用明文方式,客户端采用Host Key和Server Key对Session Key进行两次加密来加强安全性,同时还会发送检测字节和所选定的算法(这些算法是从第1步中服务器支持的算法列表中挑选出来的)。

4)服务端得到Session Key后,客户端和服务端就可以通过Session Key对数据进行加密解密操作,到此,双方完成安全(加密)通道的建立。 Host Key和Server Key都是Public Key(非对称加密),只有通过服务端的私钥(Private Key)才能对其解密,以得到Session Key。在正式使用安全通道前,客户端要求服务端发送使用Session Key加密的确认信息,以验证服务端的身份。 为避免Session Key的泄漏,SSH还采取了其他安全措施,Session Key仅保存在内存避免其泄漏;周期性更换Server Key,默认为1小时(SSH 2对Server Key安全进一步增强)。

3. 客户端认证阶段

SSH提供多种客户端认证方式。

SSH-1:

  • Password
  • Public Key
  • Kerberos
  • Rhosts && RhostsRSA
  • TIS

SSH-2:

  • Password
  • Public Key
  • hostbased 在SSH-2中考虑Rhosts存在安全漏洞,废弃了这种方式。

这里之讨论我们经常使用的的Password和Public Key方式。

此时安全通道已经及建立,之后的所有内容都通过Session Key加密后进行传输。

1)Password

Password 方式既客户端提供用户和密码,服务端对用户和密码进行匹配,完成认证。类Unix系统中,如 OpenSSH 的框架,一般通过系统的本地接口完成认证。

Password 的优势是简单,无需任何而外的配置就可以使用。缺点密码不便于记忆,过于简单的密码容易被暴力破解。

2)Public Key

Public Key认证的基本原理是基于非对称加密方式,分别在服务端对一段数据通过公钥进行加密,如果客户端能够证明其可以使用私钥对这段数据进行解密,则可以说明客户端的身份。因为服务端需要使用客户端生成的密钥对的公钥对数据首先加密,所以需要先将公钥存储到服务端的密钥库(Auhtorized Key)。还记得Github中使用git协议push代码前需要先添加SSH KEY吗?

下面详细介绍一个通过Public Key进行客户端认证的过程。

1) 客户端发起一个Public Key的认证请求,并发送RSA Key的模数作为标识符。(如果想深入了解RSA Key详细 --> 维基百科)

2)服务端检查是否存在请求帐号的公钥(Linux中存储在~/.ssh/authorized_keys文件中),以及其拥有的访问权限。如果没有则断开连接

3)服务端使用对应的公钥对一个随机的256位的字符串进行加密,并发送给客户端

4)客户端使用私钥对字符串进行解密,并将其结合session id生成一个MD5值发送给服务端。 结合session id的目的是为了避免攻击者采用重放攻击(replay attack)。

5)服务端采用同样的方式生成MD5值与客户端返回的MD5值进行比较,完成对客户端的认证。

4. 数据传输阶段

该阶段通过Session Key提供的对称加密(Secret Key)算法,保证需要传输的任何数据的安全。

整体过程如下:

回到顶部

七、总结

本文开头是ssh的简介,然后简述了ssh的发展历史和主要特性,最后对ssh的加密方式和安全连接的建立过程进行了详细的讲述。

https://www.cnblogs.com/harrymore/p/8627345.html

SSH实现工具:

openssh 是ssh协议的开源实现,Linux各发行版上的默认实现。

OPENSSH

The OpenSSH suite consists of the following tools:

  • Remote operations are done using ssh, scp, and sftp.
  • Key management with ssh-add, ssh-keysign, ssh-keyscan, and ssh-keygen.
  • The service side consists of sshd, sftp-server, and ssh-agent.

https://www.cnblogs.com/chensiqiqi/p/6550221.html

使用SSH CONFIG

/.ssh/config

使用SSH的配置文件可以在很大程度上方便各种操作,特别适应于有多个SSH帐号、使用非标准端口或者写脚本等情况。

man ssh_config

可以查看手册

如果之前是用密码方式来登录SSH,需要先改用证书方式。可以看最后面生成SSH证书

配置文件

用户配置文件在~/.ssh/config,没有的话新建一个。基本的写法是

Host 名称(自己决定,方便输入记忆的)HostName 主机名User 登录的用户名

假设有两个SSH帐号,一个是github的,一个是其他服务器的,私钥都是~/.ssh/id_rsa,可以这样写:

Host github.comHostName github.comUser gitHost serverHostName 服务器地址User 登录用户名

注意,github的Host必须写成“github.com”。你可以会有其他要求,比如指定端口号、绑定本地端口,这些都可以通过man来查询,比如

Port 端口号
DynamicForward 本地端口号

如果服务器同时有ipv4/ipv6地址,HostName使用域名会比较方便

使用

有了这些配置,很多操作就非常简化了。比如登录服务器

ssh server

传输文件

scp server:~/test . 

如果使用Putty等工具,可能需要一些其他操作(转换私钥格式,貌似),自行搜索吧

生成SSH证书

先在本地生成密钥

ssh-keygen -t rsa

会询问将密钥放在何处,默认即可。然后是输入密码,留空(否则你登录不仅需要私钥还要输入密码)。

完成后在~/.ssh目录下会生成另个文件id_rsaid_rsa.pub,一个私钥一个公钥。之后将id_rsa.pub上传到服务器端用于SSH登录的用户的家目录下。执行

cat id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm id_rsa.pub  

修改服务器端的sshd配置。编辑/etc/ssh/sshd_config如下

PubkeyAuthentication yes
PasswordAuthentication no

之后重启sshd服务

文件传输

scp

ftp

rsync

nc

远程桌面管理

TeamViewer

向日葵

vnc+vpn

Win系统自带远程桌面

Microsoft Remote Desktop Connection Client for Mac

Remote Utilities

TigerVNC

mstsc

转载于:https://www.cnblogs.com/aftree/p/9298645.html

SSH 文件传输 远程桌面管理相关推荐

  1. Ubuntu 12.04 LTS 下安装文件传输远程桌面共享软件Teamviewer

    TeamViewer是一个能在任何防火墙和NAT代理的后台用于远程控制,桌面共享和文件传输的简单且快速的解决方案.为了连接到另一台计算机,只需要在两台计算机上同时运行TeamViewer即可,而不需要 ...

  2. Linux的远程桌面管理,密钥登陆,SSH协议,四层防御系统实验详解

    Linux的远程桌面管理,密钥登陆,SSH协议,四层防御系统 一.引子 别看上面写了这么多内容,其实都是串起来的,就是看下通过SSH(Secure Shell)协议远程连接到底要经过些什么流程,有什么 ...

  3. 三款win7远程桌面管理工具介绍

    过远程桌面可以极大地方便我们进行远程技术支持.远程办公,然而我们熟知 QQ 远程.Windows自带的远程协助,使用起来并不理想,不是连接不顺畅就是操作技术高,相比之下,专门的远程桌面软件的体验更佳. ...

  4. 超好用的windows远程桌面管理工具Remote Desktop Connection Manager

    Remote Desktop Connection Manager Remote Desktop Connection Manager (RDCMan) 是微软Windows Live体验团队的主要开 ...

  5. Linux安装VNC远程桌面管理工具

    Linux安装VNC远程桌面管理工具 Linux远程桌面连接方式 虽说高级的Linux运维工程师管理Linux时都是使用"高大上"的命令行操作,可是在有些时候例如Oracle数据库 ...

  6. 微软免费的远程桌面管理工具,RDCMan——系统运维不可缺的软件

    原地址:https://www.toutiao.com/article/7238907573745828392/?app=news_article&timestamp=1686120368&a ...

  7. Windows远程桌面管理--功能强大的远程批量管理工具

    曾经,我想着要是有一款绿色小巧,功能实用的远程桌面管理工具,其界面简洁,操作便捷,能够同时远程操作多台服务器,并且多台服务器间可以自由切换,适用于网站管理人员使用的工具该有多好,苍天不负有心人,终于出 ...

  8. win10远程计算机管理,Win10系统下实现批量远程桌面管理的具体方法

    默认情况下,远程桌面控制台只能安装在win server系列服务器系统中,IT管理员可以通过远程服务器管理工具同时管理打开多个远程服务器桌面.本文,PConline小编将为大家介绍在 win10系统 ...

  9. 通过windows自带远程桌面,实现不同局域网的电脑相互访问(默默P2P远程桌面管理工具-直接内网穿透)

    大家都知道windows自带的远程桌面连接工具mstsc.exe非常好用,不但操作简单而且远程的速度还很快,相比起来比teamviwer或者向日葵等远程软件速度还快. 但是在操作上它有两个非常大的缺点 ...

最新文章

  1. MySQL 5.6 解决InnoDB: Error: Table “mysql“.“innodb_table_stats“ not found.问题
  2. ORACLE TEXT LEXER PREFERENCE(二)
  3. finallshell堡垒机_用lshell+脚本实现堡垒机(跳转机)功能
  4. java 先序遍历_二叉树的前序中序后序遍历(java代码)
  5. JavaScript 数组你都掰扯不明白,还敢说精通 JavaScript ?| 赠书
  6. 编程语言python怎么读-Python之编程基础(编程语言分类)
  7. Android-HelloWorld
  8. 某宝在售资源合集,整整1218份!
  9. IntelliJ IDEA教程
  10. 每年考证时间表(绝对会用得到的一天,怕到时候很难找到有用) ——自己留住,哦!!!!
  11. 微信注册AppID失败
  12. 研究生学习的阶段总结
  13. vue.js毕业设计,基于vue.js前后端分离在线教育视频点播系统设计与实现(H5移动项目)
  14. 搜索引擎的技术发展趋势
  15. LeetCode.No5——最长回文子串
  16. Linux系统的atop监控工具
  17. TypeScript看完就会了
  18. 机器视觉光源的分类及各种光源的特点
  19. 编译Nginx服务部署静态网站
  20. 网络基础之VLAN和端口类型(access、trunk和hybrid)

热门文章

  1. 1010-邮寄包裹问题???
  2. 【vue自定义组件】渐变色进度条组件
  3. 学生成绩分析管理系统
  4. 苹果手机桌面找不到计算机,如果iPhone上的短信图标不见了怎么办? Apple 6s短信图标消失了...
  5. 一文解读功率放大器(功率放大器如何选型)
  6. 自定义View-自制简单的钟表
  7. win10内置计算机和天气闪退,win10系统天气应用出现闪退的解决方法
  8. 平面设计师需要掌握哪些印刷知识?
  9. 微信小程序 动态添加view组件
  10. google云端硬盘转存onedrive秘籍