[SSH服务]——SSH详解

在总结ssh原理前,我先做了一个ssh过程的实验

首先我搭建了这样一个实验环境:

(1) SSH Server:10.0.10.198

(2) SSH Client:10.0.10.158

在Server端 10.0.10.198,我执行了如下操作:

(1)清空了服务器端提供的公钥与自己的密钥:

[[email protected] ssh]# rm /etc/ssh/ssh_host*
rm:是否删除普通文件 "/etc/ssh/ssh_host_dsa_key"?y
rm:是否删除普通文件 "/etc/ssh/ssh_host_dsa_key.pub"?y
rm:是否删除普通文件 "/etc/ssh/ssh_host_key"?y
rm:是否删除普通文件 "/etc/ssh/ssh_host_key.pub"?y
rm:是否删除普通文件 "/etc/ssh/ssh_host_rsa_key"?y
rm:是否删除普通文件 "/etc/ssh/ssh_host_rsa_key.pub"?y

(2)重启了SSH服务之后,它会重新生成这些的公钥和密钥:

[[email protected] ssh]# service sshd restart
停止 sshd:                                                [确定]
生成 SSH1 RSA 主机键:                                      [确定]
生成 SSH2 RSA 主机键:                                      [确定]
正在生成 SSH2 DSA 主机键:                                  [确定]
正在启动 sshd:                                            [确定]
[[email protected] ssh]# date; ll /etc/ssh/ssh_host*
2016年 06月 23日 星期四 11:58:38 CST
-rw------- 1 root root  668 6月  23 11:58 /etc/ssh/ssh_host_dsa_key
-rw-r--r-- 1 root root  590 6月  23 11:58 /etc/ssh/ssh_host_dsa_key.pub
-rw------- 1 root root  963 6月  23 11:58 /etc/ssh/ssh_host_key
-rw-r--r-- 1 root root  627 6月  23 11:58 /etc/ssh/ssh_host_key.pub
-rw------- 1 root root 1671 6月  23 11:58 /etc/ssh/ssh_host_rsa_key
-rw-r--r-- 1 root root  382 6月  23 11:58 /etc/ssh/ssh_host_rsa_key.pub

(3)并且,我清空了服务器root用户下的/root/.ssh/known_hosts:

[[email protected] .ssh]# pwd
/root/.ssh
[[email protected] .ssh]# cat known_hosts   ##已经清空了这个文件

在Client端 10.0.10.158,我执行了如下操作:

(1)同样清空了客户端机子上root用户下的/root/.ssh/known_hosts:

[[email protected] .ssh]# pwd
/root/.ssh
[[email protected] .ssh]# cat known_hosts

(2)然后尝试着远程登录(以root)登录到Server 10.0.10.198。

此时Server接收到了Client的这个请求后,会把自己的公钥传送给客户端。

客户端记录这个服务器公钥的文件就是 ~/.ssh/known_hosts。

因为这是这台Client第一次连接这个Server,所以会询问你,是否要接收这个服务器发给你的这个服务器公钥呢?

[[email protected] .ssh]# ssh  [email protected]
The authenticity of host ‘10.0.10.198 (10.0.10.198)‘ can‘t be established.
RSA key fingerprint is b3:bb:53:c0:3c:6a:f6:08:8b:a1:e3:b1:70:2b:7b:2a.
Are you sure you want to continue connecting (yes/no)?

(3)选择yes,则提示你输入密码(我们想要以root用户登录进Server,所以应输入正确的Server的root用户密码)

Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.0.10.198‘ (RSA) to the list of known hosts.
[email protected]‘s password:                            #输入正确密码后
Last login: Thu Jun 23 12:00:49 2016 from 10.0.10.198   #登录成功

(4)然后我们回到Client端,看一下~/.ssh/known_hosts下的内容

[[email protected] ~]# exit
logout
Connection to 10.0.10.198 closed.
[[email protected] .ssh]# cat known_hosts  #是的这就是服务器传给客户端的那个公钥
10.0.10.198 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA8RC2xIKGNKJwcHbEyTD7nRr0FE7yTfTxc3fgDMBE8ZHEv9ojSxKDuXP1w5tPF5UxCGKx0B5TmozKpRU+nqGLtL1p7n3PC1RxjXxov5/yElIrdPzRMhynrYsQJTp3M9WdojzWmZgoLJ+rvcfR1makDujhhkR/zz0MQltDT3NFCG73pgM+vTk7Z9vlohZIwmRNmth/OQvWA7MHya4WjkghcbLSYazFXmbatEBdF+1hUvQxUdWW4MqAv7cOZ96Zb7KQecmotbCbB/Nnas9tAmd55NpZ25TmtGaCR/ThUmfysjoDfBf40st9YZGJXDhgawSx0xn5as8mXpELr18h7ydPEQ==

(5)当Client再次请求远程登录到Server,因为~/.ssh/known_hosts已经记录过该Server的公钥了,一比对发现发现也没有差异,就可以直接输密码了。

[[email protected] .ssh]# ssh 10.0.10.198
[email protected]‘s password:
Last login: Thu Jun 23 11:49:12 2016 from 10.0.10.158

(6)当然,如果Server端重新生成了新的公钥和私钥,一比对发现和我们原来记录的有差异,会出现如下提示:

[[email protected] .ssh]# ssh [email protected]
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
c3:13:f9:67:33:e3:4d:75:77:11:db:4d:44:c3:3e:5d.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending key in /root/.ssh/known_hosts:1    ##这是告诉你:这一行的记录(原来那个公钥)跟这一次接收到的公钥不一样
RSA host key for 10.0.10.198 has changed and you have requested strict checking.
Host key verification failed.

(7)解决这个问题很简单,只要把~/.ssh/known_hosts的那一行删掉,重新ssh即可

[[email protected] .ssh]# sed -i ‘1d‘ known_hosts
[[email protected] .ssh]# ssh [email protected]
The authenticity of host ‘10.0.10.198 (10.0.10.198)‘ can‘t be established.
RSA key fingerprint is c3:13:f9:67:33:e3:4d:75:77:11:db:4d:44:c3:3e:5d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.0.10.198‘ (RSA) to the list of known hosts.
[email protected]‘s password:
Last login: Thu Jun 23 15:25:07 2016 from 10.0.10.158

回到Server 10.0.10.198端看看:

(1)看看这个它的~/.ssh/known_hosts文件:

[[email protected] .ssh]# cat known_hosts #没有东西
[[email protected] .ssh]#

(按原理来说,Client也会把自己的公钥传送给Server,不过我不知道Server究竟将它记录在了哪个文件里)



总结一下SSH的工作原理

一. SSH服务简介
       ssh为Secure Shell的缩写,由IETF的网络工作开发的,SSH建立在应用层和传输层的安全协议上.
       ssh为系统安全和用户提供了有力的安全保障

二. SSH认证原理
    (1)ssh链接的验证、加密方式:
        ssh链接CS模型(客户端-服务端),客户端发起链接,服务端对客户端进行验证,再考虑是否要链接
    (2) 加密体系:
         一种公钥加密:对称的密码加密体系
         一种私钥加密: 非对称密码加密体系

三. SSH工作过程
1) 服务器建立自己的公钥文件、计算自己的私钥文件

  • 每启动一次SSH服务,服务会去找 /etc/ssh/ssh_host*
  • 这些文件记录的就是服务器自己的公钥和私钥
  • 如果删除掉这些文件,重启SSH服务时,它会重新计算公钥密钥(即重新生成这些文件)
# ll /etc/ssh/ssh_host*
-rw------- 1 root root  672 6月  23 15:25 /etc/ssh/ssh_host_dsa_key
-rw-r--r-- 1 root root  590 6月  23 15:25 /etc/ssh/ssh_host_dsa_key.pub
-rw------- 1 root root  963 6月  23 15:25 /etc/ssh/ssh_host_key
-rw-r--r-- 1 root root  627 6月  23 15:25 /etc/ssh/ssh_host_key.pub
-rw------- 1 root root 1675 6月  23 15:25 /etc/ssh/ssh_host_rsa_key
-rw-r--r-- 1 root root  382 6月  23 15:25 /etc/ssh/ssh_host_rsa_key.pub
# service sshd restart
停止 sshd:                                                [确定]
生成 SSH1 RSA 主机键:                                      [确定]
生成 SSH2 RSA 主机键:                                      [确定]
正在生成 SSH2 DSA 主机键:                                   [确定]
正在启动 sshd:                                             [确定]

2) 客户端主动请求建立连接,服务器会将自己的公钥传送给客户端:

  • 公钥的传送是明码传送(本来公钥就是要给大家用的)
  • 客户端的~/.ssh/known_hosts文件记录着这些服务器公钥,每次连接时会将服务器传送过来的公钥和这个文件的内容比对一下
  • 如果文件中没有相关记录,则提示问你要不要接收服务器传送给你的这个公钥,接收后记录在文件中
  • 如果文件中有过相关记录,则比对一下这次传送的公钥是否和文件中记录的那条公钥相同。

3) 客户端接收好服务器公钥后,开始随机计算客户端自己的公钥和私钥:

4) 客户端将自己的公钥传送给服务器:

(我想知道服务器存放这个客户端公钥的文件是哪个,知道的盆友可以交流一下)

5) 服务器接收到了客户端传给它的公钥后,表示服务器"信任"了这个客户端:

6) 既然信任了,那么服务器就允许客户端远程连接自己了(当然啦还要把用户登录密码输对):

7) 我们要知道,在这些过程之后,Server端和Client端都有了些什么?

                     

四. SSH无密码登录原理

从SSH的工作过程其实我们可以理解出SSH无密码登录的原理。

当A要SSH到B,A要把A的公钥给B,B才会信任A,进而让A来远程自己。

所以要实现A无密码登录到B,A得把产生的公钥给B,得到B的信任,才可实现无密码登录。

可查看我的SSH无密码登录实验(http://www.cnblogs.com/snsdzjlz320/p/5612389.html)。

 

时间: 2024-10-12 17:25:39

[SSH服务]——SSH详解的相关文章

linux下ssh连接缓慢详解

摘自:https://blog.csdn.net/asd2479745295/article/details/83006379 linux下ssh连接缓慢详解原创皮的开心 最后发布于2018-10-11 09:13:37 阅读数 1824 收藏展开    最近发现公司新linux控制器使用ssh连接特别慢,大概要10秒钟左右,scp也是需要10秒左右,但是ping速度特别快.使用ssh -l IP -v 可以查看连接卡在,SSH2_MAG_SERVICE_ACCEPT received后,停顿了

Rsync服务配置详解,实现服务器间数据同步!

1.1 什么是rsync? rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输.rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次传送.rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝. 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH伺服文件.SSH情况下,rsync客户端运行程序必须同

DNS服务相关概念详解

实验环境:RHEL 32Bit DNS服务相关概念详解 DNS是一种域名解析服务,DNS服务的核心以及DNS服务的标准都是基于一个软件来实现的,这个软件叫做BIND(Berkeley Internet Name Domain),互联网上几乎所有的DNS服务都是由BIND来构建的,虽然也有其它的DNS服务构建标准,但是它们的使用语法以及工作机制都和BIND非常接近. ·Linux服务器和Windows服务器的比较 Linux服务器在没有SELinux的时候它的安全级别和Windows服务器的安全级

iOS定位服务编程详解

现在的移动设备很多都提供定位服务,使用iOS系统的iPhone.iPod Touch和iPad都可以提供位置服务,iOS设备能提供3种不同途径进行定位:Wifi, 蜂窝式移动电话基站, GPS卫星 iOS 不像Android系统在定位服务编程时,可以指定采用哪种途径进行定位.iOS的API把底层这些细节屏蔽掉了,开发人员和用户并不知道现在设备是采用 哪种方式进行定位的,iOS系统会根据设备的情况和周围的环境,采用一套最佳的解决方案.这个方案是这样的,如果能够接收GPS信息,那么设备优先采用 GP

Linux vsftpd服务配置详解

[背景] 近日,一朋友domino服务器要进行升级.迁移,搭建了linux测试系统,也开启vsftpd服务,可是配置的ftp账号,程序无法正常下载附件. [问题跟踪] 通过ftp客户端连接工具登录,发现未跳转到ftp账号指定的目录下面. cat /etc/vsftpd.config发现开启了: local_root=/home/test 将此注释重启ftp服务正常. 附录(vsftpd配置详解): vsftpd服务器配置文件"/etc/vsftpd/vsftpd.conf",以此为例.

Centos 6.5搭建SVN服务步骤详解

Centos 6.5搭建SVN服务步骤详解 一:SVN的运行方式 SVN服务器有2种运行方式, 本文介绍独立服务器的安装方法. 1.    独立服务器 (例如:svn://xxx.com/xxx): 2.    借助apache(例如:http://svn.xxx.com/xxx): 二:安装SVN 1.用yum安装svn yum -y install subversion 2.查看svn版本 svnversion --version或者/usr/bin/svnversion --version

Apache httpd(apache2)服务配置详解,Mac下设置虚拟主机部署多个web项目,及反向代理部署Java项目

Apache httpd服务配置详解 查看版本:httpd -v Server version: Apache/2.4.33 (Unix) Server built:   Apr  3 2018 17:54:07 文件路径:/etc/apache2/httpd.conf # 服务目录(全局配置)用于指定Apache的安装路径,# 此选项参数值在安装Apache时系统会自动把Apache的路径写入ServerRoot "/usr" # 设置互斥对象的目录# Mutex default:/

Samba服务配置详解(匿名,身份,别名,访问控制,挂载访问)

Samba服务配置详解 Samba是在Linux和UNIX系统上实现SMB协议的一个免费软件,由服务器及客户端程序构成.SMB(Server Messages Block,信息服务块)是一种在局域网上共享文件和打印机的一种通信协议,它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务.SMB协议是客户机/服务器型协议,客户机通过该协议可以访问服务器上的共享文件系统.打印机及其他资源.通过设置"NetBIOS over TCP/IP"使得Samba不但能与局域网络主机分享资源,还

ssh scp命令详解

--查看版本 $ ssh -V OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003 --用SSH登录到远程主机 localhost$ ssh -l jsmith(用户名) remotehost.example.com(IP地址) --用SSH退出符切换SSH会话 这个技巧非常实用.尤其是远程登陆到一台主机A,然后从A登陆到B,如果希望在A上做一些操作,还得再开一个终端,很是麻烦. 当你使用ssh从本机登录到远程主机时,你可能希望切换到本地做一些操作,然后再重新回到