zoukankan      html  css  js  c++  java
  • SSH 服务

    SSH服务

    课程目标

    • 理解ssh服务的两种认证方式
    • 掌握ssh服务的基本配置
    • 掌握ssh服务客户端工具的使用

    一、 SSH介绍

    • ssh是Linux下远程管理的工具,相比Telnet安全,运维人员必备
    • ssh全称secure shell ,安全的shell,是C/S架构,默认端口号 22,TCP/IP协议
    • ssh其实用于商业,而OpenSSH即为开源的,在Linux中默认安装
    • SSH有v1和v2版本
      • ssh v1:有漏洞,容易受到攻击
      • ssh v2:通过公钥加密(数字签名和密钥交换)的方式进行,确保服务器端的身份识别

    二、SSH加密算法

    • des 对称的公钥加密算法,安全低,数据传输速度快,使用同一个秘钥进行加密或解密

    • rsa 非对称的公钥加密算法,安全,数据传输速度慢,ssh默认的加密算法



    公钥加密,用私钥解密前者加密后的秘钥

    非对称加密

    1.远程server收到client端用户的登录请求后,server端把自己的公钥发给用户

    2、client端使用这个公钥,将密码进行加密

    3、client将加密的密码发送给server端

    4、远程server用自己的私钥,解密登录密码,然后验证其合法性

    5、根据验证结果,给client相应的响应

    非对称加密不是绝对安全

    ssh是如何解决这个问题的?

    三、SSH服务的认证方式

    • 基于用户密码的认证

      [root@CentOs6 ~]# ssh 192.168.1.101
      The authenticity of host '192.168.1.101 (192.168.1.101)' can't be established.
      RSA key fingerprint is 90:22:9b:2e:dd:7f:e7:fe:71:57:ac:ff:22:b5:c3:9b.
      Are you sure you want to continue connecting (yes/no)? yes
      Warning: Permanently added '192.168.1.101' (RSA) to the list of known hosts.
      root@192.168.1.101's password: 
      

      提示信息:无法确认主机的真实性,指纹是。。。。。,你确定要继续吗?

      说明:理论上应该上对钥的确认,由于公钥通过RSA算法加密,太长,不好直接比较,所以给公钥一个hash的指纹,方便比较。

      说明:当客户端输入yes确认对方的公钥指纹后,server端的公钥就会被存放到客户机的用户家目录里~/.ssh/known_hosts文件中,下次再访问就直接通过密码登录,不需要再确认公钥。

      ssh不指定用户的话,访问之后默认当前用户,如果服务器端根本没有那个用户,那么无法连接。

      - ssh root@192.168.1.101  或者  ssh -l root 192.168.1.101  (-l和用户名之间空格可无)
      

    • 基于秘钥对的认证

      需求:A主机免密码登录B主机

      • 相关文件解读:
        1. id_rsa:保存私钥
        2. id_rsa.pub:保存公钥
        3. authorized_keys:保存已授权的客户端公钥
        4. known_hosts:保存已认证的远程主机公钥

    四、SSH服务基本配置

    环境准备:编辑-->虚拟网络编辑器-->仅主机模式(选中两个选项,子网10.1.1.0,自定义DHCP设置,range 10.1.1.2~10.1.1.10)-->修改主机名和网络环境(静态IP)

    • 基于秘钥对认证(免密码登录)--->重点掌握

      需求:client端有一个用户user01,该用户指定root用户免密码登录server端

      环境:client:10.1.1.3 server:10.1.1.2

      思路:

      • client端生成一段秘钥
      • 将生成的公钥远程拷贝到server端

      步骤:

      1. client端的user01用户生成一对秘钥对
      [user01@client ~]$ ssh-keygen
      Generating public/private rsa key pair.
      Enter file in which to save the key (/home/user01/.ssh/id_rsa): 
      Created directory '/home/user01/.ssh'.
      Enter passphrase (empty for no passphrase): 
      Enter same passphrase again: 
      Your identification has been saved in /home/user01/.ssh/id_rsa.
      Your public key has been saved in /home/user01/.ssh/id_rsa.pub.
      The key fingerprint is:
      ad:26:e8:e1:c5:95:ca:8c:c9:3b:c8:d6:f9:fe:46:ce user01@client
      The key's randomart image is:
      +--[ RSA 2048]----+
      |                 |
      |                 |
      |                 |
      |         o       |
      |        S .      |
      |   . B o..       |
      | . o*.B+o        |
      |  +o++ oE        |
      | .  ++oo.        |
      +-----------------+
      [user01@client ~]$ ls .ssh/
      id_rsa (私钥) id_rsa.pub (公钥)
      
      
      1. 将刚刚生成的公钥远程拷贝到server端的root家目录里指定位置

      (拷贝目的地是需求的用户)

      [user01@client ~]$ scp .ssh/id_rsa.pub root@10.1.1.2:/root/.ssh/authorized_keys
      或者
      [user01@client ~]$ ssh-copy-id -i .ssh/id_rsa.pub root@10.1.1.2 (推荐使用)
      The authenticity of host '10.1.1.2 (10.1.1.2)' can't be established.
      RSA key fingerprint is a5:98:06:58:84:35:d3:f4:4c:f8:43:a1:a5:12:f5:8e.
      Are you sure you want to continue connecting (yes/no)? yes
      Warning: Permanently added '10.1.1.2' (RSA) to the list of known hosts.
      root@10.1.1.2's password: 
      Now try logging into the machine, with "ssh 'root@10.1.1.2'", and check in:
      
        .ssh/authorized_keys
      
      to make sure we haven't added extra keys that you weren't expecting.
      
      server端查看
      [root@server ~]# cd .ssh
      [root@server .ssh]# ls
      authorized_keys
      [root@server .ssh]# cat authorized_keys 
      ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA4IcI4Jb5PLg4rcKBcqdmuyNIbNZleUGD9oCtGtLc7Ta57LKVxGrB9TIX4tO4fEVyl7xbu2j/EsOSIH29LNNiubv+zkBhMecO258pvy1tDu2W5xdufcyR1F3cjNulDEVwo8TdKwIQ8/2vqhILJ9mTFP2ptOrkktuqjQ++staaRBgai6Ve8aaoV+l7XEXyyj2sV9s/u1WSa0MH32uGdsJqS8B8VzRFPYHYIBOsMmGTeVCfNQ2NRXH8fYB7YZbiExMoGMZPttq8uaQ18HvPbNa6f1wtDcH8ECaHRiFQz/lV7wGZI/18Dz9M3oXrLnDBEOSR2dahOYjxSTwHnf/E48Y/kw== user01@client
      
      
      1. 测试验证
      [user01@client ~]$ ssh root@10.1.1.2
      Last login: Thu Apr 18 19:19:26 2019 from 10.1.1.1
      [root@server ~]# 
      备注:即使root用户的密码改变了也不影响
      仔细思考原理,基于秘钥对
      

    练习:

    • 禁止root用户远程登录

      了解软件相关知识

      [root@server ~]# rpm -ql openssh-server
      /etc/rc.d/init.d/sshd		// 启动脚本
      /etc/ssh/sshd_config 		// 配置文件
      /usr/sbin/sshd				// 二进制命令
      
      [root@server ~]# rpm -ql openssh-clients
      /etc/ssh/ssh_config			
      /usr/bin/scp
      /usr/bin/sftp
      /usr/bin/slogin
      /usr/bin/ssh
      /usr/bin/ssh-add
      /usr/bin/ssh-agent
      /usr/bin/ssh-copy-id
      /usr/bin/ssh-keyscan
      
      [root@server ~]# which ssh-keygen		// 生成秘钥的工具
      /usr/bin/ssh-keygen
      [root@server ~]# rpm -qf /usr/bin/ssh-keygen
      openssh-5.3p1-94.el6.x86_64
      

      步骤:

      [root@server ~]# cp /etc/ssh/sshd_config /opt/  // 备份
      [root@server ~]# vim /etc/ssh/sshd_config 		// 修改配置文件
      #PermitRootLogin yes
      PermitRootLogin no		// 权限设置为 no
      重启服务 
      [root@server ~]# service sshd restart
      
      [root@client ~]# ssh root@10.1.1.2   	// 客户端尝试连接
      root@10.1.1.2's password: 
      Permission denied, please try again.	// 连接被拒绝
      root@10.1.1.2's password: 
      
      
    • 修改默认端口号

      目的是为了安全。

      [root@server ~]# vim /etc/ssh/sshd_config
      #Port 22
      Port 10022
      [root@server ~]# service sshd restart
      
      [root@client ~]# ssh liuwei@10.1.1.2
      ssh: connect to host 10.1.1.2 port 22: Connection refused
      [root@client ~]# ssh liuwei@10.1.1.2 -p 10022
      ssh: connect to host 10.1.1.2 port 10022: No route to host
      
      1.网络问题
      2.关闭服务器端防火墙,再次尝试,成功连接
      
      
    • ssh服务的访问控制

      • 可以使用TCP_Wrappers工具做网络控制

        /etc/hosts.allow 和 /etc/hosts.deny

      • 如何判断一个服务支持TCP_Wrappers功能

        rpm 包安装的服务:

        [root@server ~]# ldd /usr/sbin/sshd | grep libwrap
        	libwrap.so.0 => /lib64/libwrap.so.0 (0x00007f83b3ba9000)
        

        源码包:

        ./configuer --enable-libxxxx // 配置时开启功能

    • 需求:不允许10.1.1.3服务器来远程访问

    vim /etc/hosts.deny

    sshd:10.1.1.3

    sshd:10.1.1.0/255.255.255.0(不支持写8、16、24) EXCEPT 10.1.1.3

    sshd,vsftpd:.itcast.cc EXCEPT MissHou.itcast.cc(主机名)

    [root@server ~]# man 5 hosts_access
    [root@server ~]# vim /etc/hosts.deny 
    末尾添加sshd:10.1.1.3,保存退出,这是sshd程序的一个模块,无需重启sshd服务
    
    测试验证
    [root@client ~]# ssh liuwei@10.1.1.2 -p 10022
    ssh_exchange_identification: Connection closed by remote host  	//说明成功
    
  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/liuwei-xd/p/11020545.html
Copyright © 2011-2022 走看看