ssh学习,ssh的使用
SSH的工作原理
传统的网络服务程序,比如 FTP , POP , Telnet ,本质上都是不安全的,因为它们在网络上用明文传送数据、用户账号和用户口令,很容易受到 中间人 攻击方式的攻击,攻击者会冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
为了满足安全性的需求, IETF 的网络工作小组制定了 Secure Shell (缩写为 SSH ),这是一项创建在 应用层 和 传输层 基础上的安全协议,为计算机上的 Shell 提供安全的传输和使用环境。
SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄漏问题。通过 SSH 可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
本文将会重点讨论 SSH 中用到的加密算法和建立安全连接的过程。
为了保证信息传输的安全性, SSH 使用了对称加密、非对称加密和散列等技术。
对称密钥加密又称为对称加密、私钥加密、共享密钥加密,是密码学中一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。
SSH 使用对称密钥加密整个连接过程中传输的信息。值得注意的是,用户自己创建的public/private密钥对仅仅用于验证,不会用在加密连接上。对称加密允许对密码进行身份验证,以防止第三方窥探。
共享密钥通过密钥交换算法生成,它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个密钥。客户端和服务端都参与了这个过程,过程的细节将在后面阐述。
生成的密钥将用来加密这次会话过程中客户端和服务端传输的数据。这个过程会在验证客户身份之前完成。
SSH 支持多种对称密钥算法,包括AES,Blowfish,3DES,CAST128和Arcfour。客户端和服务端可以配置采用算法的列表。客户端列表中第一个能被服务端支持的算法将被采用。
比如在Ubuntu 14.04上,客户端和服务端默认的配置如下: aes128-ctr , aes192-ctr , aes256-ctr , arcfour256 , arcfour128 , aes128-gcm@openssh.com , aes256-gcm@openssh.com , chacha20-poly1305@openssh.com , aes128-cbc , blowfish-cbc , cast128-cbc , aes192-cbc , aes256-cbc , arcfour 。
也就是说,如果两台Ubuntu 14.04采用默认配置,它们总是会采用 aes128-ctr 算法来加密连接。
在非对称加密方法中,需要一对密钥,一个是私钥,一个是公钥。这两个密钥数学相关。用公钥加密后所得的信息,只能用私钥才能解密。如果知道了其中一个,并不能计算另外一个。因此,如果公开了一对密钥中的一个,并不会危害到另外一个的秘密性质。
SSH 在一些地方使用了非对称加密。
在密钥交换过程中使用到了非对称加密。在这个阶段,客户端和服务端生成临时密钥对,并且交换公钥来生成共享密钥。
在身份验证的过程中也使用了非对称加密。 SSH 密钥对用来向服务端验证客户端身份。客户端创建一对密钥,然后将公钥上传到远程服务器上,写入文件 ~/.ssh/authorized_keys 。
在创建共享密钥后,客户端必须向服务端证明身份。服务端会使用文件中的公钥加密一段信息,并将加密后的信息发送给客户端。如果客户端可以能够破解这段信息,那么就能够证明自己拥有相关的私钥。之后服务端会为客户端设置shell环境。
散列是电脑科学中一种对资料的处理方法,它通过某种特定的算法将要检索的项与涌来检索的索引关联起来,生成一种便于搜索的数据结构(散列表)。它也常用做一种资讯安全的方法,由一串资料中经过散列算法计算出来的资料指纹,来识别档案和资料是否有被篡改。
SSH 主要使用了散列消息认证码(Keyed-hash message authentication code,缩写为HMAC),来确认消息没有被篡改。
上面提到的对称加密协商过程中,会使用消息认证码(MAC)算法。这个算法会从客户端支持的算法中选出。
在密钥协商完成后,所有的消息都必须携带MAC,用于通信双方验证消息的一致性。MAC值由共享密钥,消息的分组序列和实际消息内容计算得到。
在对称加密区域之外,MAC本身作为分组的最后部分被发送。研究者通常建议先机密数据,然后计算MAC
SSH 协议采用客户端-服务端模型对两方进行身份验证,并对它们之间的数据进行加密。
服务端在指定端口监听连接请求。它负责协商安全连接,认证连接方,并为客户端生成正确的shell环境。
客户端负责协商安全连接,验证服务器的身份是否与以前记录的信息相匹配,并提供凭证进行身份验证。
SSH会话分为两个阶段。第一个是同意和建立加密来保护未来的沟通。第二个阶段是对用户进行身份验证,并发现是否应该授予对服务器的访问权限。
当客户端发起请求后,服务端返回支持的协议版本。如果客户端可以匹配其中一个协议版本,则连接继续。服务端会提供它的公共主机密钥,客户端可以用这个密钥来验证服务端是否合法。
此时,通信双方采用迪菲-赫尔曼算法来协商会话密钥。
该算法的大致过程如下:
用于其余连接的共享密钥加密被称为二进制数据包协议。上述过程允许双方平等地参与生成共享密钥。
生成的密钥是对称密钥,这意味着用于加密消息的密钥也可以用于解密。其目的是将后面的通信包装在不能被外部人员解密的加密隧道中。
在生成会话密钥后,就开始进行用户身份验证。
根据服务器接受的方式,有几种不同的方法可用于身份验证。
最简单的方法是密码验证,其中服务器要求客户端输入尝试登陆账号的密码。密码是通过协商加密发送的。
虽然密码被加密,但由于密码的复杂性受到限制,因此通常不建议使用此方法。与其他身份验证的方法相比,自动脚本相对容易攻破正常长度的密码。
最为推荐的选择是使用SSH密钥对。SSH密钥对是非对称密钥。
公钥用于加密只能用私钥解密的数据。公钥可以自由共享,因为没有从公钥中导出私钥的方法。
验证流程如下:
可以看到,密钥的不对称性允许服务端使用公钥加密消息给客户端。然后,客户端可以通过正确解密消息来证明它拥有私钥。
笔者本科专业是信息安全,不过毕业后并没有从事安全行业,工作4年课堂上学习的知识基本忘的差不多了。
而SSH算是工作中最常用到的东西之一,其工作原理涉及不少密码学的东西。
写这篇博文,一是希望能帮助读者了解SSH,二也是希望自己能捡起一些专业知识。在互联网/软件相关行业里,不论是否从事安全工作,了解这些东西都是很有必要的。
用ssh服务器连接好之后怎么开始学习
Redhat服务器上放行ssh服务器:(默认22端口)
#iptables -I INPUT -p tcp - -dport 22 -j ACCEPT
#iptables -I INPUT -p udp - -dport 22 -j ACCEPT
然后登陆ssh服务器:(先不要指定用户)
#ssh 192.168.0.5
【然后根据系统给出的用户输入相应的密码即可】
java的三大框架SSH 难学吗?
难学,找到方法,就很容易,总结方法如下:
第一步,看视频或者入门文章。视频可以去verycd找,文章可以去iteye找。先看Struts2,也可以看SpringMVC3,然后是Hibernate,最后看Spring。
这一步的目的是知道每个框架作用,能干什么,大概上怎么使用。
第二步,看项目,推荐SpringSide。这个步骤可以知道实际项目中SSH一般是怎么配合的。
第三步,自己动手。如果能实现一个单表完整的增删改查,算是基本完成任务。能再考虑下怎么更通用化,写点东西,这块就没问题了,到哪个公司去,只要稍微看下他们的配置文件,都能上手。
需要思考的是有框架和没有框架,到底能带来什么。
有人不喜欢SSH框架,也有人推荐别的框架,个人喜欢nuts框架,但是总需要明白的是框是干什么用的,怎么用的,在实际运用中有了一些体会,才能明白自己的取舍。
用Struts,是要明白MVC,用Hibernate,要明白什么是持久化,什么是OR/mapping,用Spring,要明白什么是依赖注入,什么是AOP。就算不精通,也要大致理解。明白了这些,Hibernate换成Mybaits,Struts换成SpringMVC,甚至别的什么框架,都能很快上手。
北大青鸟java培训:学习Java常用的SSH框架是什么呢?
Java框架一直是面试的重点,在成熟的大型企业、快速发展的企业和初创企业中都需要掌握Java框架,这样才能对当前正在开发的系统有一个大致的了解,以便更好地熟悉基础知识和相关技术。
那么学习Java常用的框架是什么,应该如何使用呢?下面广东计算机学习为大家具体介绍。
SSH框架的组合主要由Struts,Spring,Hibernate这3个框架构成,把Struts作为系统整体的基础结构加以利用,负责MVC的分离,在Struts框架的模型部分,控制业务的跳跃,利用Hibernate框架支持持续性层,利用Spring管理Struts和Hibernate。
下文北大青鸟广东计算机学院具体说明了这三种框架:Struts框架Struts框架基本上是基于相当于Servlet的MVC设计模式的Web应用程序框架。
MVC设计模式使用Struts2作为控制器(Controller)来建立模型和视图之间的数据交互。
广东广东java软件开发发现它包含Struts1和Struts2两个版本,两者的差异实际上还很大,Struts2虽然不是Struts1的更新,但是充分发挥了这两种技术的优点,它放弃了原来Struts1的缺点,使Web开发更加容易。
Spring框架我们都应该知道,最传统的JavaWeb应用程序是通过JSP、Servlet、Javabean实现的,它实现了最基本的MVC分层。
该结构存在一些问题,如JSP需要使用符号在页面中嵌入大量Java代码,页面结构混乱,Servlet和Javabean负责大量的跳转和操作工作,紧密耦合,程序重用低等。
广东计算机学校发现Spring框架的出现解决了这个问题。
通过对AOP和IOC两个特性的加持,所有类之间的这种依赖完全被配置文件所取代,实体bean被很好地管理到容器中,所以耦合大大降低,可重用性大大提高。
Hibernate框架Hibernate框架是半自动化的永久性层框架,SQL的大幅度削减,代码的制作,在这个框架中,需要相关作业的时候,不需要注意数据库表,通过将一个级别永久性化就可以达到添加,删除和检查的功能。
广东广东IT培训发现这是因为在框架内部实现了很多针对数据库的操作方法。
SSH框架自学要学多久
应该很快的呀。2个星期足够了。
首先一点记住,知识点要看官方文档。
先从H开始吧,看个人家写demo,就可以写pojo之间无关系的简单应用。
然后看下单1对多 多对1 多对多的配置,了解级联,外键维护方,主键生成策略,延迟加载。基本上应用就没问题了。熟练后了解下缓存的配置。
struts的话,1和2差的比较多,你干脆就跳1个看吧。看2吧,2比较强大,架构思路也好。一样先找Demo,看一变,然后模仿着做一遍,能做出来后。看官方文档,了解ognl,S2的其他配置有哪些,以及它的s标签,然后是S2的零配置和注解,这样基本可以了。
spring的话,了解IOC,DI,AOP原理,配置文件的话,也是找demo咯,不了解属性的话,看文档。
程序都是从模仿开始的。
这3个都可以独立使用,3个先分开用,都能用了,然后先把struts2和hibernate整合在一起,在集成spring进来。
稍微粗略了解就可以,你不用都去记住,知道有就行,以后用到了在去查或者google大法。
以上只是到使用阶段,不过学习框架的本质不仅仅是使用,等你都用熟了,应该去了解人家设计框架的思路,这样到底有什么好处,这些理念和设计思想才最重要。
基础,学习ssh框架难吗
有一定java基础,学习ssh框架难吗
不难,无非就是配置文件之类的,一堆依赖,如果底子真够硬,那么熟悉框架基本用法后,完全可以啃框架,看源码。其实框架并没有想象的那么复杂。