SSH登录详解

SSH(SecureShell),是建立在应用层基础上的安全协议,其SSH客户端适用于多种平台,可以有效防止远程管理过程中的信息泄露问题。

1.SSH发展历史

  • SSH1.x

    SSH是1995年由芬兰赫尔辛基大学研究员Tatu Ylönen提出用于替代Telnet等非安全协议的远程Shell协议。SSH1.x通过CRC-32避免数据被篡改,后来逐步演化为私有软件。

  • SSH2.x

    由IETF工作小组发布SSH-2标准。采用MD5和SHA-1实现通信的完整性,安全性优于SSH-1。

  • OpenSSH

    目前最流行的SSH实现的开源版本,具有可移植性,一直维护并支持SSH-2协议,目前很多操作系统中默认安装的版本。

2.SSH加密原理

互联网上的数据传输,若未经加密,请求可能会被其他恶意拦截轻松获取账号密码等信息,可通过数据加密的方式进行避免。加密的方式主要有两种:

  • 对称加密(秘钥加密),即客户端和服务端使用同一套秘钥对数据进行加密和解密,如下图1所示。对称加密的加密强度高,破解难度大。但是在多个客户端和服务端安全的保存秘钥是一个比较困难的操作,一个秘钥被泄露,则整个系统会失去安全性。

  • 非对称加密(公钥加密),为解决一个秘钥的问题,非对称加密应运而生。非对称加密有一个公钥和一个私钥,公钥加密后的数据只能通过对应的私钥解密(反之亦然),而通过公钥推出私钥的可能性微乎其微。SSH即通过非对称加密完成用户登录。

3.SSH工作流程

从客户端的角度来看,SSH提供两种级别的安全验证。分别为基于口令(密码)的安全验证和基于公钥的安全验证。

  • 密码登录:密码登录流程如下图2所示。

Server收到Client用户的登录请求,Server将自己的公钥发送给用户;Client使用公钥将自己的密码加密Client将加密后的数据发送至Server端Server端使用对应的私钥解密数据,然后验证其合法性如果密码正确,Server同意用户登录

私钥是Server端独有的,从而保证了网络传输过程中登录数据的安全性。但是实施的过程中存在一个风险:比如攻击者插在用户与远程主机间,冒充Server端将伪造的公钥发送给用户,即可获取用户的密码登录远程主机。这就是所谓的中间人攻击。

SSH设计通过口令确认的方式避免中间人攻击。如果用户是第一次登录Server,系统会出现如下提示:

ssh xxx@xxxThe authenticity of host 'host (xx.xx.xx.xx)' can't be established.RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.Are you sure you want to continue connecting (yes/no)?

提示的信息主要表达的意思是:“无法确认主机xxx的真实性,其公钥指纹为xxx,是否继续登录?”由于公钥长度较长难以比对,提示信息中将其经过MD5计算转换为128位的指纹便于比较。而为确保用户能比对公钥指纹,Server需在自己的网站上贴出自己的公钥指纹用于用户核对。

若用户同意连接该Server后,系统会提示用户该host已被确认并被追加到文件known_hosts文件中以便下次登录时跳过警告。然后即可输入密码按上述流程登录。

每个SSH用户(client端)都有自己的known_hosts文件, 此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

  • 公钥登录:密码登录的一个问题在于,每次登录都要输入密码。为避免多次登录的麻烦,SSH提供了另一种可以免密的登录方式:公钥登录。

Client将自己的公钥存放在Server端,追加到authorized_keys文件中。Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R),然后将加密后信息发送给Client。Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。Server端会最后比较Digest1和Digest2是否相同,完成认证过程。

此后登录服务器就不再需要密码。比如git使用SSH登录,就可以在git下设置和管理SSH公钥,如下图所示。

4.SSH密钥相关工具

依托于不同的操作系统,SSH密钥生成和客户端登录各有其不同的工具。

 

 

Linux系统

Windows系统

生成密钥

ssh-keygen

keygen.exe

Xshell

客户端登录

ssh命令

Putty

Xshell

5.SSH密钥格式

由SSH的发展历史可见,SSH有SSH1.x、SSH2.x(IETF)、openssh等不同的版本,因此也定义了不同的密钥格式。puttygen.exe可生成IETF格式的密钥,ssh-kengen生成openssh格式的密钥,xshell则可选择所需格式。

  • SSH1格式:公钥格式为所有字段以单个空格符分隔,各字段依次为选项、位数、指数、系数、注释。第一个字段是可选的,表示该条目(行)是否以数字开头,选项字段不会以数字开头。最后一个字段注释,如果在生成密钥时没有给定注释,默认注释为密钥的创建者(一般就是 username@hostname 这种格式),注释仅仅是提供给用户查看密钥时作为一个辨识标记,在 SSH 使用中没有任何作用。

1024 35 127622522440000403693297547695512386039512623330270038753455316326495028304745444916417839627801075110249968608231245340093104912581642154883517309431162302400461903792227044870802907303974666069054112219556551766494201399889464578628657768414291418705994169562594444590440509069669981690177202614753409732391 ting@test.com
  • IETF格式

---- BEGIN SSH2 PUBLIC KEY ----AAAAB3NzaC1yc2EAAAABIwAAAIEAtb2RtaDk8zTC28y20mHxLVswAQDl4rCno3t/kfFhW1oRQxF7kQSQ6cg0y9K7stK7Vb6tCZEDLA39jVKHEQpzgQ+sb17691QtaFyBubMn1hpw/1fDq2W2lDL9C/QmbjO7pDi6mnXTXxBsxF3PgLkck3KZtaafLe/uwTCB3behjyc=---- END SSH2 PUBLIC KEY ----
  • openssh格式:公钥格式为所有字段以单个空格符分隔,各字段依次为选项、密钥类型(keytype)、base64编码后的密钥、注释。第一个字段是可选的,表示该条目(行)是否以数字开头,选项字段不会以数字开头。最后一个字段注释,如果在生成密钥时没有给定注释,默认注释为密钥的创建者(一般就是 username@hostname 这种格式),注释仅仅是提供给用户查看密钥时作为一个辨识标记,在 SSH 使用中没有任何作用。密钥类型(keytype)可能是 ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, ssh-ed25519, ssh-dss 或 ssh-rsa。

ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAtb2RtaDk8zTC28y20mHxLVswAQDl4rCno3t/kfFhW1oRQxF7kQSQ6cg0y9K7stK7Vb6tCZEDLA39jVKHEQpzgQ+sb17691QtaFyBubMn1hpw/1fDq2W2lDL9C/QmbjO7pDi6mnXTXxBsxF3PgLkck3KZtaafLe/uwTCB3behjyc= ting@test.com

参考文章:

  • 《图解SSH原理》

    https://www.jianshu.com/p/33461b619d53

  • 《SSH的发展历程与基本原理》

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

  • 《[Linux] ssh-key 公钥文件格式》

    https://www.cnblogs.com/ifantastic/p/3984544.html

  • 《SSH原理与运用(一):远程登录》

    http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html

  • 《SSH密钥对登录的原理和实践》

    https://www.cnblogs.com/zhouhaibing/p/7679706.html

posted @ 2019-03-13 12:22  suntingme  阅读(16686)  评论(0编辑  收藏  举报