ssh在网络安全中的魅力

SSH

1. SSH简介

SSH是(Secure Shell Protocol)的简写 ,是网络应用层协议。目的是为远程登录会话和其他网络服务提供安全性的协议。

2. 主要功能

传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的[速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。

3. 认证方式

3.1 基于口令认证

只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。

交互流程

  1. 用户A向远程主机B发送登录请求
  2. 远程主机B把自己的公钥发送给用户A
  3. 用户A使用B的公钥加密用户名和密码,发送给远程主机B验证
  4. 远程主机B用自己的私钥进行解密登录的用户名和密码,如果正确,就同意用户登录。

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

$ ssh user@host
The authenticity of host 'host (12.18.429.21)' 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)?

这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?

所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0​ : de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。

如果输入yes后,会出现下面信息:

Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts. 
Password: (enter password) 

如果密码正确,就可以登录了。

当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。

3.2 基于公钥认证

用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。

交互流程

  1. 用户A将自己的公钥存储在远程主机B上
  2. 用户A向远程主机B发送登录请求
  3. 远程主机B用A的公钥加密一段随机字符串,发送给A
  4. 用户A用自己的私钥解密后,再将此字符串和sessionKey通过MD5生成摘要Digest1,再发送给远程主机B
  5. 远程主机B将随机字符串和sessionKey通过MD5生成摘要Digest2,比对用户A发送过来的摘要A是否一致。如果一致,直接允许登录shell,不再需要密码。

实际操作

  1. 生成公钥和私钥

    ssh-keygen -t rsa -f  ~/.ssh/id_rsa
    

    参数说明:

    -f 选项指定密钥文件路径

    -t 选项指定加密算法(rsa、dsa、ecdsa等)

    -b 选项指定密钥长度

    -N 选项指定密钥口令

    -C 选项指定注释

  2. 将客户端生成的公钥发送给远程服务器

    ssh-copy-id username@ip_address
    

    将生成的id_rsa.pub公钥中的内容远程写入到IP对应主机的.ssh/authorized_keys 文件中

    如果IP是本机,就是在本机也会生成一个.ssh/authorized_keys 文件中

  3. 此时即可免密登录远程主机

    ssh username@ip_address
    

四个重要文件说明

1.id_rsa:保存私钥

2.id_rsa.pub:保存公钥

3.authorized_keys:保存已授权的客户端公钥

4.known_hosts:保存已认证的远程主机ID

4. 安装SSH

apt install openssh-sever
systemctl status ssh  # 查看服务状态
ufw allow ssh   # 防火墙打开ssh端口

一些常用命令

systemctl disable --now ssh # 禁止ssh
systemctl enable --now ssh # 重启ssh 
cat .ssh/id_rsa.pub >> .ssh/authorized_keys #将本机公钥保持到授权文件中
chmod 600 .ssh/authorized_keys 
ssh-copy-id -i .ssh/id_rsa.pub  username@192.168.x.xxx

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值