这里说的不是java的SSH框架,是1995年,芬兰学者Tatu Ylonen设计的SSH协议。
有计算机网络基础的同学都知道,在网上传输的数据是可以被截取的。那么怎样才能获得安全?

一、春点行话

电影《智取威虎山》里,那些我们听不懂的“汉语”,就是春点行话,也可以叫“暗语”,像这样:
土匪:蘑菇,你哪路?什么价?(什么人?到哪里去?)
杨子荣:哈!想啥来啥,想吃奶来了妈妈,想娘家的人,孩子他舅舅来了。(找同行)
杨子荣:拜见三爷!
土匪:天王盖地虎!(你好打的胆!敢来气你的祖宗?)
杨子荣:宝塔镇河妖!(要是那样,叫我从山上摔死,掉河里淹死)
  为什么要用暗语呢?毕竟土匪这个职业比较特殊,在自家山寨里还好,要是去赶集,
突然发现业务了手痒痒怎么办,总不能在人群中就商量怎么谋财害命吧,这时候,
土匪中的语言学家就发明了暗语,也就是把一些“敏感词汇”用一些“家常话”代替掉。
上面对话里括号里面就是那些暗语的意思。久而久之,就形成了很多暗语,这些暗语口口相传,
对土匪事业的发展起了很大的推动作用。但是每年纳新的时候,发现靠口口相传暗语很难被新手掌握。
那些学霸土匪们纷纷表示,让语言学家出本书,他们一定会买正版且仔细学习的。
于是语言学家励精图治,耗时好几天终于完成了《嘿嘿山暗语通则v1.》(以下简称《通则》)。
由于当时土匪老大担心如果拿到正规出版社出版会被平民学会,就失去了暗语本身的意义,
于是最终没有正式发布,只是作为集团内部的文档,代代相传。但是那个语言学家“开源”的思想很重,
几经周旋,老大终于同意他这本文档可以在土匪业内流传。
    时代在发展,社会在进步。开源思想被普遍接受,各山头土匪纷纷表示,“开源大法好!”《通则》经历了几个世纪的更新迭代,
最终成为了一种业内开源的数据加密系统(因为不仅说话可以用,写信的时候也可以用,这样,土匪之间的信件即使被官方截取,
也不明白其中的意思),并且有了些很好听的名字——“江湖春点”、“春点行话”……
    我们来总结一下这种古老的数据加密方式。一定程度上解决了数据传输的安全性问题。但是缺点也很明显,破译很简单。
    于是有一天,这本只在业内流传的《通则》被一个叛徒交给了官府。
    本来官府是有很多各个山头的资料的,但是都是用暗语写的,都看不懂。但是现在有了《通则》,那些数据一夜之间全成了白话。
    这个事件对土匪业的打击很大,土匪们深恶痛疾,都表示开源害死人!
    但是后辈的土匪也有语言学家,他们为自己的山头编写了不外传的内部暗语通则。土匪业有了新的发展。
    但是这也出现了新的问题。虽然说同行是冤家,但是有时候集团之间的合作才能有更大的利益,但是每个山头都有自己的《通则》。
为了实现交流,只能把自己的《通则》给友方山头copy一份。这样,合作伙伴多了之后,要冒着“合作伙伴”把自己山头的《通则》泄露的风险。
土匪业的发展又遇到了瓶颈。
    直到1995年,芬兰学者Tatu Ylonen设计出了SSH协议。这个问题终于被解决。

二、SSH协议

   不同于之前的暗语,暗语对数据的加密和解密是用的同一种规则(对称性规则),
那么我只要知道这个规则,我就能破译所有数据。而ssh协议是一种非对称性加密协议,
ssh协议有两套规则,而且加密和解密过程不可逆(理解这点很重要,当然这里的理解不是让你去弄懂“如何实现”,而是要时刻记住)。
我知道很多同学看到这里可能一头雾水了,别想太多,先往下看。假设我们有A规则和B规则。
    我们用A规则来加密的数据只有B规则能解密。而用B规则加密的数据只有A规则能解密。
    这就是非对称性规则。那么怎么使用呢?
    每个山头都自己搞这样的两套规则。A规则自己内部严格保密,B规则公诸世界。
这样,我们假设有两座山头,甲山头和乙山头,他们都有自己的AB规则和对方的B规则。 当甲方要给乙方发数据的时候,用乙方的B规则加密数据,然后发送;
乙方收到数据后,用自己的A规则解密,阅读;
乙方回复的数据用甲方的B规则加密;
甲方收到后用自己的A规则解密,阅读。
……
……
    这样即使数据在传输的过程中,即使被别人截取,也会因为没有A规则,而只能有一堆看不懂的东西。
-
这就是我所理解的SSH协议。
其实SSH协议不仅可以用于数据加密,还可以用于“身份验证”。但是原理是一样的,就留给各位一个想象的空间。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

SSH是一种协议,实现计算机之间的加密登录,即使被截获,截获的也只是加密后的密文,不会泄密。

如果每次登录另外一台计算机,都需要输入密码,就显得太麻烦,所以SSH协议实现了无密码登录,即公钥登录。所谓公钥登录,就是用户先把自己的公钥发给远程主机存储起来,登录时,远程主机向登录主机发送一个随机的字符串,登录主机用自己的私钥加密后发给远程主机,远程主机用登录主机的公钥解密,如果成功,则说明是可信的,不需要输入密码就可以登录。

如果主机A和B想实现相互之间的无密码登录,操作步骤如下:

1. 分别生成密钥

ssh-keygen -t rsa

一直回车,会在/home/${username}/.ssh目录下生成公钥(id_rsa.pub)和私钥(id_rsa),将其中的公钥命名为authorized_keys_${hostname}。

2. 主机B使用scp将自己的公钥发到主机A的/home/${username}/.ssh目录下,主机A将自己的公钥和主机B的公钥合并成一个文件authorized_keys:

cat autharized_keys_A >> autharized_keys;
cat autharized_keys_B >> autharized_keys;

并且将authorized_keys发到主机B的/home/${username}/.ssh目录下,这样主机A和B就有了对方的公钥,可以实现无密码登录了。

3. 在主机A使用

ssh B

登录主机B,第一次提示主机B的公钥指纹,是否继续登录。所谓公钥指纹,就是将主机的1024位RSA公钥进行MD5计算,得到一个128位的指纹。如果用户知道登录主机的公钥指纹,就可以核对,如果是正确的,就输入yes,然后输入密码登录。当用户输入yes时,则会将主机的公钥存储在/home/${username}/.ssh/known_hosts中,下次登录时,就不会再有这个提示,而是直接实现无密码登录了。

如果第一次以后仍然要求输入密码,可能是.ssh文件的权限问题,输入:

chown username: /home/username/.ssh
chown username: /home/username/.ssh/*
chmod 700 /home/username/.ssh
chmod 600 /home/username/.ssh/*

改变权限就不会再提示输入密码了。

如果出现:

Agent admitted failure to sign using the key

将私钥加入即可:

ssh-add   ~/.ssh/id_rsa

(关于数据传输安全)SSH协议的更多相关文章

  1. 何为SSH协议?

    该文来自百度百科,自我收藏. SSH 为 Secure Shell 的缩写,由 IETF 的网络小组(Network Working Group)所制定:SSH 为建立在应用层基础上的安全协议.SSH ...

  2. SSH协议及其应用

    SSH协议及其应用 原文作者:阮一峰 链接: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruany ...

  3. SSH2.0编程 ssh协议过程实现

    之前为了自己做一套SSH,先自己实现了一套telnet.但经过这么多天的苦逼,发现以前的工作都是徒劳.ssh的协议很繁杂,核心的内容在于密码算法,而且自己很难在网上找到周全的细节讲解与详细的实现,只有 ...

  4. SSH2.0编程 ssh协议过程实现(转)

    SSh协议: 全称为Secure Shell,即很安全的shell,主要目的是用来取代传统的telnet和r系列命令(rlogin,rsh,rexec等)远程登录和远程执行命令的工具,实现远程登录和远 ...

  5. 【转载】SSH协议及其应用

    原文作者:阮一峰 链接: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html http://www.ruanyifeng.com/ ...

  6. 15.Git四种协议-本地协议(local)、HTTP协议、SSH协议、Git协议

    1.本地协议(loacl) 最基本的协议,其远程仓库其实就是硬盘内部的一个目录(例如D:\\project).常见于团队内的人对一个共享的文件系统(例如NFS)具有访问权限,或者多人共用一台电脑的情况 ...

  7. SSH工作过程简介和SSH协议算法集简介

    SSH简介 SSH是Secure Shell(安全外壳)的简称,是一种在不安全的网络环境中,通过加密机制和认证机制,实现安全的远程访问以及文件传输等业务的网络安全协议. SSH协议采用了典型的客户端/ ...

  8. Linux ssh协议

    基础知识 ssh:secure shell protocol,安全的远程登录 作用:是建立在应用层基础上的安全协议,实现数据传输过程中数据的加密,代替telent协议 使用tcp协议,端口号为22 s ...

  9. Git : SSH 协议服务器

    SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务. SSH协议语法格式 对于拥有 shell 登录权限的用户账号,可以用下面的语法访问 Git 版本库: 语法 1 : ssh:// ...

随机推荐

  1. tesseract-ocr安装问题

    今天安装tesseract-ocr的时候,载了坑,记录一下. 1. 安装时语言库的选择,我把 aditional language data 这一项全选中了,装的时候那叫一个慢啊,差不多3个小时装好的 ...

  2. Python3 读写文件

    读文件 打开一个文件用open()方法(open()返回一个文件对象): >>> f = open(filename, mode,buffering) #buffering寄存,具体 ...

  3. 通用Logging框架设计

    项目开发中,大家都会使用日志框架(LogBack, log4j , java.util.logging 等).下面来简单的了解一下日志框架的大体设计思路. 类图:

  4. echo '1'.print(2)+3; 的输出结果为什么是511

    今天看到一道有趣的题目,如上所示.结果为什么会是511呢? 这个结果的计算分为三步来理解: 首先计算的是 右边print(2)+3,这个你可以直接理解成print(2+3),得到的结果是5.而prin ...

  5. 4.4Python数据处理篇之Matplotlib系列(四)---plt.bar()与plt.barh条形图

    目录 目录 前言 (一)竖值条形图 (二)水平条形图 1.使用bar()绘制: 2.使用barh()绘制: (三)复杂的条形图 1.并列条形图: 2.叠加条形图: 3.添加图例于数据标签的条形图: 目 ...

  6. python Docker 查看私有仓库镜像

      pip 安装: 首先安装epel扩展源: yum -y install epel-release 更新完成之后,就可安装pip: yum -y install python-pip 安装完成之后清 ...

  7. win32gui.Findwindow(parm1,parm2)查找窗口的句柄方法

    介绍之前先让大家了解一下win32gui的模块用法 和 获取窗口类名工具 使用Python时,有时也会要操作到系统窗口的一些东西,下面就介绍win32gui.Findwindow(param1,par ...

  8. (转)Spring Boot(八):RabbitMQ 详解

    http://www.ityouknow.com/springboot/2016/11/30/spring-boot-rabbitMQ.html RabbitMQ 即一个消息队列,主要是用来实现应用程 ...

  9. 手把手丨我们在UCL找到了一个糖尿病数据集,用机器学习预测糖尿病(三)

    梯度提升: from sklearn.ensemble import GradientBoostingClassifier gb=GradientBoostingClassifier(random_s ...

  10. robotframework连接mysql数据库

    1.安装databaselibrary.pymysql 通过cmd命令执行: pip install robotframework-databaselibrary pip install pymysq ...