一.Telnet和SSH

1.Telnet
       Telnet是一个远程连接服务是一个C/S架构,具有Server端和Client端,Client通过telnet协议连接到服务器端,这是早期常用的远程连接方法.然后改方法进行连接的过程中使用的都是明文进行传输,在同一网络中的其他用户很容易通过网络工具捕捉到该数据包进行分析进而获取到密码.这是一个很不安全的连接方法.telnet协议使用的是23号端口是基于tcp的链接
   2.SSH
       telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你的传给服务器的数据,然后再冒充你把数据传给真正的服务器。
服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题
       SSH的英文全称是Secure Shell。通过使用SSH,你可以把所有传输的数据进行加密,这样“中间人”这种攻击方式就不可能实现了,而且也能够防止DNS和IP欺骗。还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。 SSH有很多功能,它既可以代替telnet,又可以为ftp、pop、甚至ppp提供一个安全的“通道”。
       最初SSH是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。 OpenSSH是SSH的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是SSH。SSH是由客户端和服务端的软件组成的,有两个不兼容的版本分别是:1.x和2.x。用SSH 2.x的客户程序是不能连接到SSH 1.x的服务程序上去的。OpenSSH 2.x同时支持SSH 1.x和2.x。

二.SSH验证原理详解

SSH验证方式主要有以下两种:
   1.基于口令的验证
   2.基于密钥的验证

三.SSH配置选项详解

SSH的配置文件主要分为服务器端和客户端:

     服务器端:/etc/ssh/sshd_config客户端:/etc/ssh/ssh_config1.限制root用户远程登录# vi /etc/ssh/sshd_configPermitRootLogin no2.通过控制用户访问限制 SSH 访问# vi /etc/ssh/sshd_configAllowUsers fsmythe bnice swilsonDenyUsers jhacker joebadguy jripper3.# vi /etc/ssh/sshd_configProtocol 24.不要支持闲置会话,并配置 Idle Log Out Timeout 间隔:
#当客户端连上服务器端后,若没有任何操作则,服务器端默认会
#每隔一定时间发送一个alive消息给客户端寻求客户端应答,
#默认一共发三次.若都没有回应,则断开连其中
#ClientAliveInterval设置每隔多少秒发送一次alive消息
#ClientAliveCountMax 设置一共发多少次.# vi /etc/ssh/sshd_configClientAliveInterval 600      # (Set to 600 seconds = 10 minutes)ClientAliveCountMax 05.禁用基于主机的身份验证:(这种认证方式是不安全的)# vi /etc/ssh/sshd_configHostbasedAuthentication no6.使用 Chroot SSHD 将 SFTP 用户局限于其自己的主目录# vi /etc/ssh/sshd_configChrootDirectory /home/%u7.禁用空密码:# vi /etc/ssh/sshd_configPermitEmptyPasswords no8.指令压缩Compression {yes|no|delayed}#默认是delayed 意思就是等到用户认证结束后再对数据进行压缩9.设置日志级别#LogLevel INFO 默认是INFO级别,调试的时候可以选择DEBUG#级别,这样调试信息更加详细10.支持图形界面操作X11Forwarding yes#对Xwindows的数据进行转发,开启该项并使用xshell程序远程登#录服务器是可以打开图形界面程序

其它选项:

PrintMotd no
# 登入后是否显示出一些信息呢?例如上次登入的时间、地点等,预设是 yes ,但是,如果为了安全,可以考虑改为 no !
PrintLastLog yes     
# 显示上次登入的信息!可以啊!预设也是 yes !
KeepAlive yes    
# 一般而言,如果设定这项目的话,那么 SSH Server 会传送
# KeepAlive 的讯息给 Client 端,以确保两者的联机正常!
# 在这个情况下,任何一端死掉后, SSH 可以立刻知道!而不会
# 有僵尸程序的发生!
Banner /to/somefile
# 指定在用户完成认证前输出到终端的信息
GSSAPIAuthentication no
#指定是否使用基于GSSAPI的用户认证默认为no
MaxAuthTries 默认值为6
#每一个链接最多尝试验证的次数为这个值得一半,此外失败的信息还会记录在/var/log/message
UseDNS yes
#是否对主机名进行dns解析(常用与没有固定IP只有域名的场合)

四.常见SSH问题实践

1.SSH连接慢问题
   SSH链接慢的问题很普遍,网上的解决方案也很多,基本上就是两个选项的问题.
一个就是UseDNS,一个就是GSSAPIAuthentication,但是很多博文对着两个选项的讲解都是众说风云,且有很多不妥之处.
      1.当UseDNS开启的时候你使用ip地址进行远程连接时没有任何影响的
       只有当你使用域名进行连接的时候,需要进行域名解析这个时候是会慢的.
       2.当开启GSSAPIAuthentication yes的时候,会对远程连接进行基于GSSAPI的认证,然后对于这个认证是是需要获取域名的,此时
       当你使用ip地址进行连接的时候会对这个ip地址进行反向解析以获取域名,当你使用域名进行远程连接的时候,则需要进行正向解析
       当你使用ip地址无法进行反向解析的时候会弹出
    reverse mapping checking getaddrinfo for bogon failed - POSSIBLE BREAK-IN ATTEMPT!
       此时我们只要关闭该选项顿时你就会觉得连接速度快了很多.
相信对于上面的一番解释后,你会基于你的工作环境进行一个很好的设置,以提高你的远程连接速度.

  2.scp命令实现阻断
   偶然情况下发现一个可以阻断scp实现文件拷贝的方法,前提是可以正常进行ssh连接
只要在服务器端的/etc/bashrc文件中加入echo "anystring" 即可(至于原理我只是萌萌珑珑有点懂,等搞懂了再奉上)

五.SSH密钥认证实现

1.生成密钥(客户端操作)

[root@wwww ~]# ssh-keygen -t rsa -b 4096
#-t 指定生成密钥的算法 -b指定密钥的位数
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
#询问生成的密钥放在的位置,默认放在家目录下的.ssh目录
Enter passphrase (empty for no passphrase):
#询问是否对私钥再进行加密
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
e7:60:45:fe:d8:09:24:c1:1e:ef:35:cc:c1:c3:24:e4 root@wwww.axhu.com
#生成的指纹信息

注: 这里使用ssh-keygen -t rsa -b 4096 -f /path/to/KEY_FILE -P '指定加密私钥的密码' 这样既可实现自动化,不要交互了

2.传送密钥至远程服务器
有两种实现方式:
   方式一:

[root@wwww ~]# scp ~/.ssh/id_rsa.pub root@192.168.157.132:~/
The authenticity of host '192.168.157.132 (192.168.157.132)' can't be established.
RSA key fingerprint is 6e:0f:f8:f8:c7:c2:11:e6:4d:99:aa:16:6a:81:4a:02.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.157.132' (RSA) to the list of known hosts.
root@192.168.157.132's password:
id_rsa.pub                                                                                   100%  740     0.7KB/s   00:00
然后远程连接到远程主机进行设置:
[root@wwww ~]# ssh root@192.168.157.132
root@192.168.157.132's password:
Last login: Sat Jan 18 21:16:49 2014 from 192.168.157.128
[root@bogon ~]# mkdir .ssh
#这个目录默认不存在,但是这太机子若连接过其他服务器就会自动生成.ssh目录用来保存known_hosts文件
[root@bogon ~]# chmod 700 .ssh
#这个权限很重要,设置不对的话是没法通过验证
[root@bogon ~]# cat id_rsa.pub >> ~/.ssh/authorized_keys
#这里最好每次都是以>>追加的形式输出,不然会覆盖其他主机的公钥
[root@bogon ~]# chmod 600 ~/.ssh/authorized_keys
#修改权限放在其他用户修改查看
到此配置完成

方式二:

[root@wwww ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.157.132
root@192.168.157.132's password:
Now try logging into the machine, with "ssh 'root@192.168.157.132'", and check in:.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
#直接通过命令完成.推荐使用,但是并不是每台机器上都会装有这个命令.

六.SSH双机互信脚本实现

#!/usr/bin/expect
#author Jeff_linux
#Time 2014-01-18
set local_passwd "server"
set des_passwd "server"
set timeout 10
set localip "192.168.0.254"
set desip "192.168.0.251"
spawn ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -P ""
spawn ssh-copy-id -i /root/.ssh/id_rsa.pub root@$desip
expect {
"yes/no" { send "yes\r";exp_continue}
"password:" {send "$des_passwd\r";exp_continue}
}
spawn ssh $desip "ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -P \"\""
spawn scp $desip:/root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
expect {
"yes/no" { send "yes\r";exp_continue}
"password:" {send "$local_passwd\r";exp_continue}
}

SSH原理之图文详解相关推荐

  1. 硬盘的读写原理(图文详解)

    硬盘的种类主要是SCSI .IDE .以及现在流行的SATA等:任何一种硬盘的生产都要一定的标准:随着相应的标准的升级,硬盘生产技术也在升级:比如 SCSI标准已经经历了SCSI-1 .SCSI-2. ...

  2. Kmeans原理公式图文详解

    在网上查看了些博客,感觉大家都对数学公式的解释的比较晦涩,下面我结合一个非常简单的示意图解释下他的数学公式,理解不到位的请留言. kmeans是一种聚类算法下面是算法的描述 给定训练样本是每一个 ,即 ...

  3. 全息投影是计算机技术吗,「图文」3D全息投影技术原理【图文详解】-火米互动...

    什么是3D全息投影技术 3D全息投影技术主要是利用干涉和衍射的原理将物体的三维图像进行再现,是全息摄影技术的逆向展示过程.其第一步是利用干涉原理记录物体光波信息,即拍摄过程;第二步是利用衍射原理再现物 ...

  4. 数字签名,数字证书,证书链原理(图文详解)

    文章目录 数字签名,数字证书,加密简述 数字签名原理 数字证书原理 证书链 数字签名,数字证书,加密简述 数字签名:谈及数字签名,就如小时候老师叫把卷子或者作业带回去给家长签字.只不过数字签名非物理用 ...

  5. 原理 rpm_图文详解,微型直流电机的工作原理

    导语:微型电机是通过将电能转化为机械能,通过运转提供动力源.不少产品需求较大的启动扭矩,微型直流电机有高扭矩特性,能应用在扭矩大的产品,并且电机的转速可以调整.适应负载,所以微型直流电机一直应用非常广 ...

  6. 【图文详解】一文全面彻底搞懂HBase、LevelDB、RocksDB等NoSQL背后的存储原理:LSM-tree日志结构合并树...

    LSM 树广泛用于数据存储,例如 RocksDB.Apache AsterixDB.Bigtable.HBase.LevelDB.Apache Accumulo.SQLite4.Tarantool.W ...

  7. windows远程android传输文件,电脑(Linux/Windows)使用SSH远程登录安卓(Android)手机实现无线传输和管理文件(图文详解)-Go语言中文社区...

    电脑(Linux/Windows系统)使用SSH远程登录安卓(Android)手机实现无线传输和管理文件(图文详解) 温馨提示 本文只针对安卓(Android)手机!iPhone或者WP的手机用户,请 ...

  8. TYPE-C接口的工作原理图文详解

    TYPE-C接口的工作原理图文详解 发表于 2018-01-29 09:53:53 电子常识 +关注 2016年,有一个名词在手机上非常火,几乎所有的旗舰手机都会提到这个名词,说到这,大家应该都够猜到 ...

  9. Docker持续部署图文详解

    2019独角兽企业重金招聘Python工程师标准>>> Docker持续部署图文详解 博客分类: docker 架构 JAVA项目如何通过Docker实现持续部署(只需简单四步),即 ...

最新文章

  1. Java String字符串补0或空格
  2. STL容器的基本特性和特征
  3. Run-Time Check Failure #3
  4. 物联网基础之了解CCP协议,COAP协议,MTQQ协议等
  5. [软件工程基础]团队作业Week3
  6. ZooKeeper 定位:能解决什么问题?不能解决什么问题?
  7. Python2爬虫学习系列教程
  8. ASP.NET获取文件名,后缀名
  9. java怎么更改id名_java - 尽管ID已更改为_id,但列'_id'不存在
  10. jQuery中ready与load事件的区别
  11. no number java_java.lang.NumberFormatException问题!!!
  12. 基于端到端深度强化学习的柔性作业车间调度问题研究
  13. 修改TIM的默认路径
  14. 【数据分析与挖掘实战】金融风控之贷款违约预测详解1(有代码和数据集)
  15. python填充三角形颜色怎么输入_用Python填充三角形(海龟)
  16. go双线性对数字签名
  17. 微型计算机2015年10月,微型计算机及接口技术2010年10月真题试题(04732)
  18. Matlab/simulink MIL自动化测试工具使用说明
  19. Vivado创建项目和仿真
  20. B站崩了上热搜,说好的高可用呢?

热门文章

  1. spring_在运行时更新代码(已Spring解密)
  2. python结束不退出_Python 基本功: 1. Hello world
  3. 文章 图片 PHP保存,关于文章图片储存
  4. 数据仓库dw层_数据仓库分层之辩
  5. 语言中出现蘌ress_【语言发育迟缓,10大表现不能忽视?】
  6. 找条朋友圈手都刷断了,原来是没有掌握正确的使用姿势...
  7. Git 常用命令清单,掌握这些,轻松驾驭版本管理
  8. 大于小于优化_以MySQL为例,详解数据库索引原理及深度优化
  9. 中山大学提出SimAM:无参Attention!助力分类/检测/分割涨点!
  10. yolov5 face 使用踩坑记录