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/ 目录

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

相关文章推荐

Java实现SSH模式加密原理及代码

Java实现SSH模式加密原理及代码 2016-01-07    分类:JAVA开发、编程开发、首页精华4人评论     来源:qing_gee的专栏 分享到: 更多 4 一、S...

【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

上面博文,主要简单的介绍了一下SSH的基本概念,比较宏观,作为初学者能够有一个整体上的认识,个人认为对学习有很好的辅助功能,它不仅仅是一个瞭望塔,更是检验是否真正掌握所有内容的一个前提。       ...

【SSH快速进阶】——Spring AOP原理及其实现

上篇文章简单总结了一下静态代理以及JDK和Cglib两种方式实现的动态代理。由此也延伸出了一个重要的编程思想:AOP。 AOP原理   AOP(Aspect Oriented Program...

【SSH进阶之路】Struts基本原理 + 实现简单登录(二)

上面博文,主要简单的介绍了一下SSH的基本概念,比较宏观,作为初学者能够有一个整体上的认识,个人认为对学习有很好的辅助功能,它不仅仅是一个“瞭望塔”,更是检验是否真正掌握所有内容的一个前提。  ...

ssh和ssm差异及原理

  • 2017年11月19日 23:57
  • 141KB
  • 下载

SSH框架的底层机制及原理

  • 2015年04月09日 16:32
  • 14KB
  • 下载

【SSH进阶之路】Spring的AOP逐层深入——AOP的基本原理

【SSH进阶之路】Spring的AOP逐层深入——AOP的基本原理
  • lffxsx
  • lffxsx
  • 2017年10月31日 17:48
  • 38

SSH工作原理

  • 2013年04月17日 11:16
  • 142KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SSH实现原理
举报原因:
原因补充:

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