SSH原理与运用(一)

目录

前言

本文来自阮一峰的网络日志。原来一直使用的是nfs的方式来调试开发板,现在因为hlr大神使用ssh的方式进行调试,对ssh也很有兴趣,特此搜集网络上的文章来进行学习!

数字签名与数字证书

加密方法

单钥加密

加密和解密都用同一套密码。单钥加密的情况下,密钥只有一把,一旦密钥泄漏,密码也就被破解了。目前,通用的单钥加密算法为DES(Data Encryption Standard)。

双钥加密

加密和解密使用两套密码。双钥加密的情况下,密钥有两把,一把是公开的公钥,还有一把是不公开的私钥。双钥加密的原理如下:

  • 公钥和私钥是一一对应关系,有一把公钥就必然有一把与之对应的、独一无二的私钥,反之也成立。
  • 所有的(公钥、私钥)对都是不同的。公钥可以解开私钥加密的信息,反之也成立。
  • 同时生成公钥和私钥应该相对比较容易,但是从公钥推算出私钥,应该是很困难或者是不可能的。
    目前,通用的双钥加密算法为RSA(Rivest-Shamir-Adleman)。
    双钥体系中,公钥用来加密信息,私钥用来数字签名。因为任何人都可以生成自己的(公钥、私钥)对,所以为了防止有人防止有人散布伪造的公钥骗取信任,就需要一个可靠的第三方机构来生成经过认证的(公钥,私钥)对。也就是说,可靠的第三方机构认证了一对双钥,这时候申请的公司就有了公钥和私钥,把自己的私钥交给受信任的客户,而自己用公钥加密,这时候如果私钥被认证,就可以确保文件有效。所以私钥不能泄漏。
    本部分来自阮一峰的网络日志

数字签名

数字签名是什么?

什么是SSH?

SSH是一种网络协议,用于计算机之间的加密登录,目前已经成为Linux系统的标准配置。如果一个用户从本地计算机使用SSH协议登录另一台远程计算机,可以认为这种登录是安全的,及时中途被截获,密码也不会泄露!(果然还要好好学习计算机网络)。
SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。在linux下的实现基于OpenSSHOpenSSH是自由软件,应用广泛。

远程登录

SSH主要用于远程登录。假定要以用户名user登录远程主机host,使用如下命令:

ssh usr@host
比如:
ssh pi@192.168.4.24
其中usr表示远程主机名,192.168.4.24表示远程主机的ip地址

如果本地用户名与远程用户名一直,登录时可以省略用户名

ssh host

SSH的默认端口是22,也就是登陆请求会送进远程主机的22端口。使用p参数可以修改这个端口。

ssh -p 2222 user@host

上面这条命令表示,ssh直接连接远程主机的2222端口。

中间人攻击

SSH之所以能够保证安全,原因在于它采用公钥加密。
整个过程如下:

  1. 远程主机收到用户的登陆请求,把自己的公钥发给用户
  2. 用户使用这个公钥,将登陆密码加密后,发送回来
  3. 远程主机用自己的私钥解密登陆密码,如果密码正确,就同意用户登陆。
    这个过程本身是安全的,但是实施过程中如果有人截获登陆请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。SSH协议的公钥没有证书中心公证,也就是说,都是自己签发的。
    如果攻击者在用户与远程主机之间用伪造的公钥,获取用户的登陆密码,再用这个密码登陆远程主机,SSH的安全机制就无效了。这种风险就是"中间人攻击"。

口令登录

如果是第一次登录对方主机,系统会出现如下提示:

The authenticity of host '192.168.4.24 (192.168.4.24)' can't be established.
ECDSA key fingerprint is SHA256:tOOZQyAp9po/RvbkdpmRrJKEmgWGBu4WAAFsd7WPKZ8.

这段话的意思是无法确认host主机的真实性,只知道他的公钥指纹,是否继续连接?用户是无法知道远程公钥指纹是多少的,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
假定经过风险衡量以后,用户决定接受这个远程主机的公钥。

Are you sure you want to continue connecting (yes/no)? 

系统会出现一句提示,表示host主机已经得到认可。

Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.

之后,输入远程主机的密码即可:

Password: (enter password)

如果密码正确,就可以登陆了。当远程主机的公钥被接受之后,就会被保存在"/etc/ssh"目录下。下次再次连接这台主机,系统就会认出它的公钥,而跳过警告部分,直接提示输入密码。
最后,如果在远程连接了远程主机之后,使用exit命令可以退出ssh远程连接。

公钥登录

使用密码登录,每次都必须输入密码。SSH还提供了公钥登录,可以省去输入密码的步骤。公钥登录就是用户将自己的公钥存储在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先存储的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
这种方法要求用户必须提供自己的公钥。如果没有现成的,可以用ssh-keygen生成一个:

ssh-keygen

运行上面的命令后,系统就会出现一系列提示,可以一路回车。运行结束后,在$HOME/.ssh目录下,会新生成两个文件:id_rsaid_rsa.pub。前者是公钥,后者是私钥。
这时在输入下面的命令,将公钥传送到远程主机host上面:

ssh-copy-id user@host

之后,登录就不再需要密码了。
如果失败,查看SSH原理与运用(一):远程登录中有这部分解决方法。博主在树莓派上直接成功,所以也就不需要了。

链接地址

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值