SSH实现原理

转载 2013年12月04日 16:51:40
功能:
SSH可以提供两种功能:
1、SSH服务,提供远程登录
2、类似于FTP的sftp-server,用于基于ssh的文件传输

组成:
SSH和其他的服务器软件一样,在链路上也有两部分组成,分别是客户端软件和服务端软件。SSH有两个不兼容的版本分别是:1.x和2.x,使用SSH 2.x的客户程序是不能连接到SSH1.x的服务端程序上的。OpenSSH 2.x同时支持SSH 1.x和2.x
服务端其实是一个守护进程(daemon),他在后台运行并相应来自客户端的连接请求。服务端一般是sshd进程,提供了对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥加密和非安全连接
客户端程序包括ssh程序,以及scp(远程拷贝)、slogin(slogin)、sftp(安全文件传输)等其他的应用程序

工作机制:
他们的工作机制大致是本地客户端发送一个连接请求到远程服务器,服务端检查申请的包和ip地址再发送密钥给ssh的客户端,本地再将密钥发送给服务端,自此建立连接。
ssh在连接方式上有两种:
-------version 1--------
ssh主机(Server端)用RSA加密方式产生一个1024bit的RSA-key,用来产生公约与私钥的演算方法:
1、当ssh daemon(sshd)启动时,就会产生一个768-bit的公钥(或称为Server Key)存放在Server中
2、当client端的联机请求发送后,Server将公钥发送给client,此时client会对比判断公钥的正确性,判断的依据/etc/ssh/ssh_knownhosts、$HOME/.ssh/known_hosts
3、client端接收768bit的Server Key之后,client自己也随机产生一个256bit的私钥(private key,或host key),并且以加密的方式传送给Server
4、Server与client在此联机过程中,就以一对1024bit的key pair来进行数据的传递
补充说明:
Public Key是放在Server上,而Client的软件需要能接收Public Key,计算出Private key,并把二者的组合成一把独一无二的key pair(因为Client每次的256bit的Private key是随机产生的),在Client端的用户默认目录下$HOME/.ssh/known_keys会记录曾经联机过的主机的Public Key,用以确认每次来自该主机的联机是否正确
--------version 2---------------
在version 1的联机过程中,当Server接收Client的Private key之后,就不会针对该联机的key pair进行校验,如过黑客传送了恶意代码,由于主机端部会检验联机的正确性,所以可能会接收该程序代码。
在version 2中增加了一个确认联机正确性的diff-hellman机制在每次数据传输中Server都会以这种机制校验资料来源是否正确

OperSSL软件:
OpenSSL是一种比较常见的SSH服务端和客户端软件。提供了sshd、shell、sftp功能,其默认端口是22,在Redhat、CentOS等Linux操作系统中的默认SSH Daemon就是这个了。
下面对这个软件的几种用法加以说明:
A. Server keys记录:$HOME/.ssh/known_hosts
当Client端接收来自Server端的Public key之后,会主动的对比这个key的正确性,有下面的两种情况:
1、没有记录,那么会出现提示,是否接收来自Server的Public Key
2、对比成功,直接提示输入密码
如果出现了这样的登录提示:warning: Remote host identification has changed
那么说明上次登录的远程ssh主机的key已经被更改了,原因可能是Server的重启、重装或者更新了相关的软件,这时候的处理方式是将$HOME/.ssh/known_hosts文件中与主机相关的字段删除,重新接收来自Server的Public key
B. 设置不用输入用户名和密码就能立即登录的目标主机
原理:将Client端产生的key复制到Server中
在Client向Server登录时,由于两者在ssh要联机的信号传递中,就已经对比过key了,因此可以立即进入数据传输,而不需要输入密码。
1、在Client端建立Public key和Private key两个密钥,命令为ssh-keygen
2、将Private-key放在client的默认目录下,$HOME/.ssh,并为该用户可读的状态
3、把Public key放在任何一个你希望要用来登录主机的Server的某user的默认目录中的认证文件中
举例:
--Client:
# SHELL>> ssh-keygen -t rsa
$HOME/.ssh/id_rsa 私钥
$HOME/.ssh/id_rsa.pub 公钥
-t参数是指使用何种加密方式,可以是用rsa和dsg等
id_rsa文件需要放到Client,需要是当前用户有可读可写权限
id_rsa.pub需要放置到Server端
# SHELL>> scp id_rsa.pub IP_ADDRESS:~/.ssh
--Server:
cat id_rsa.pub >> authorized_keys
注意:
Client必须制作出Private,Public两个key,且Private需要放置到.ssh文件夹内
Server端需要有Public key,$HOME/.ssh/authorized_keys
这个东西在Oracle的RAC集群中会用到,两个机器的Oracle用户可以通过ssh命令不需要输入密码的情况下进行互相登录!
附录:SSH 传输文件

在linux下一般用scp这个命令来通过ssh传输文件。
1、从服务器上下载文件

scp username@servername:/path/filename /var/www/local_dir(本地目录)

 例如scp root@192.168.0.101:/var/www/test.txt  把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)
2、上传本地文件到服务器

scp /path/filename username@servername:/path   

例如scp /var/www/test.php  root@192.168.0.101:/var/www/  把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

3、从服务器下载整个目录

scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)

例如:scp -r root@192.168.0.101:/var/www/test  /var/www/  

4、上传目录到服务器
scp  -r local_dir username@servername:remote_dir
例如:scp -r test  root@192.168.0.101:/var/www/   把当前目录下的test目录上传到服务器的/var/www/ 目录

注:目标服务器要开启写入权限。

SSH协议交互过程

一、什么是SSH   SSH是英文Secure Shell的简写形式。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。...
  • kluleia
  • kluleia
  • 2012年11月13日 16:42
  • 8851

struts、hibernate、spring实现驾校管理系统

struts、hibernate、spring实现驾校管理系统
  • zj_helloWorld
  • zj_helloWorld
  • 2016年03月03日 15:29
  • 911

javaEE之SSH框架的底层机制及原理

Struts1的工作原理 Struts1工作原理图:                                 1、初始化:struts框架的总控制器ActionServlet是一个Ser...
  • fxy832231
  • fxy832231
  • 2017年03月09日 12:11
  • 422

SSH原理之图文详解

目录:        一.Telnet和SSH        二.SSH验证原理详解        三.SSH配置选项详解        四.常见SSH问题实践        五.SSH密钥...
  • Aug0st
  • Aug0st
  • 2014年10月20日 23:25
  • 5294

SSh三大框架工作原理介绍

Struts1工作原理 Struts1工作原理图 1、初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启...
  • z742182637
  • z742182637
  • 2015年12月24日 14:22
  • 13572

基于WEB/SSH架构技术

基于WEB/SSH架构技术 基于WEB/SSH架构技术         Web应用程序使用HTTP作为核心的通信协议,也被称为基于WEB的应用程序。随着WEB系统复杂度的提高,应用服务器程...
  • shenghuaDay
  • shenghuaDay
  • 2016年06月05日 22:38
  • 813

SSH三大框架的运行原理及机制

struts2是运行原理: 1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求; 2.这个请求会经过图中的几个过滤器,最后会到达FilterDispatcher过...
  • u011921842
  • u011921842
  • 2013年12月04日 22:04
  • 2709

SSH三大框架整合原理

三大框架整合原理 1、三大框架的作用 struts2是一个mvc框架 spring容器 1、利用ioc和di做到了完全的面向接口编程 ...
  • u014010769
  • u014010769
  • 2015年04月11日 11:07
  • 2275

SSH 和 SSM 的实现原理

SSH 通常指的是 Struts2 做控制器(controller),spring 管理各层的组件,hibernate 负责持久化层。 SSM 则指的是 SpringMVC 做控制器(controll...
  • qq_37878579
  • qq_37878579
  • 2017年10月04日 15:46
  • 192

ajax 文件上传带进度条原理

html代码 Document
  • eoluo
  • eoluo
  • 2017年02月18日 23:13
  • 607
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSH实现原理
举报原因:
原因补充:

(最多只允许输入30个字)