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

转载于:https://www.cnblogs.com/suntingme/p/10522310.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu SSH配置详解 SSH(Secure Shell)是一种网络协议,用于在不安全的网络上提供安全的远程访问。Ubuntu是一种流行的Linux操作系统,下面是关于如何配置Ubuntu SSH的详细解释。 1. 安装OpenSSH服务器:在Ubuntu上使用SSH,首先需要安装OpenSSH服务器。使用以下命令在终端窗口中进行安装: sudo apt-get install openssh-server 2. 配置SSH服务器:安装完成后,可以通过编辑SSH配置文件进行服务器配置。打开终端窗口输入以下命令来编辑配置文件: sudo nano /etc/ssh/sshd_config 3. 修改端口号:默认情况下,SSH服务器在22端口上监听连接请求。为了增加安全性,我们可以修改该端口号。在配置文件中找到"Port"行,将其修改为所需的端口号。 4. 配置允许的用户:默认情况下,SSH服务器允许所有用户进行远程连接。如果需要仅允许特定用户连接,可以使用"AllowUsers"命令将其限制为特定的用户。通过在配置文件中添加以下行来指定允许连接的用户名: AllowUsers username1 username2 5. 禁用root用户登录:为了提高安全性,可以禁用root用户通过SSH进行远程登录。在配置文件中找到"PermitRootLogin"行,并将其修改为"no"。 6. 重启SSH服务器:完成配置后,需要重新启动SSH服务器以使更改生效。使用以下命令重启SSH服务器: sudo systemctl restart ssh 配置完成后,就可以使用远程终端连接到Ubuntu系统了。在其他计算机上打开终端窗口,使用以下命令连接到Ubuntu系统: ssh username@ip_address -p port_number 以上是关于如何在Ubuntu上配置SSH的详细解释。通过修改SSH服务器的配置文件,可以增加系统的安全性,并控制允许远程连接的用户。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值