美文网首页
ssh远程协议

ssh远程协议

作者: 优秀砖 | 来源:发表于2019-05-24 16:45 被阅读0次

    37.day05--ssh远程协议
    1.SSH基本概述
    SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。
    1.提供远程连接服务器的服务、2.对传输的数据进行加密

    远程连接:  ssh  telnet RDP(Windows)     MAc--RDP-->Windows
    
    ssh 主要是提供给服务器使用(Linux)          安全    数据包都是加密的  22/tcp
    telnet 主要是提供给路由器\交换机\防火墙        明文  数据包不进行加密    23/tcp
    必须要记下来的............
    
    面试题: 请说说如下服务都是那些端口运行的?
        ftp         20/tcp 21/tcp
        http        80/tcp
        https       443/tcp
        ssh         22/tcp
        telnet      23/tcp
        dns .........   53/tcp 53/udp
        
    面试题: 请说说如下端口都代表那些服务?
        80 443 22  3306  9000 10050  10051  
    
        验证 ssh 与 telnet 的区别?
        
        
        
        1.安装telnet服务
        [root@nfs ~]# yum install telnet-server -y
    
        2.启动telnet服务
        [root@nfs ~]# systemctl start telnet.socket
        
        3.准备普通用户进行远程链接测试   (开启抓包工具)
        [root@nfs ~]# useradd oldboy
        [root@nfs ~]# echo "1" | passwd --stdin oldboy
    
        
        telnet验证结果:
            1.不支持root直接登录
            2.所有的传递的数据都是明文
            
        ssh验证结果:    
            1.支持root直接登录
            2.所有传递的数据都是密文
    

    2.SSH相关命令 scp

    ssh客户端命令: 远程连接
    [root@nfs ~]# ssh 172.16.1.41 #当前客户端是root,则登录的服务端也使用root
    [oldboy@nfs ~]$ ssh root@172.16.1.41 #链接对端服务器,并写上链接服务器的用户身份
    [root@nfs ~]# ssh -p22 root@172.16.1.41 #链接服务器,指定用户,并指定端口
    [root@nfs ~]# ssh -p2222 root@172.16.1.41
    ssh: connect to host 172.16.1.41 port 2222: Connection refused

    sftp客户端命令: 文件传输
    命令:
    图形界面: xftp FileZilla
    xftp:
    1.能上传文件夹
    2.能支持断点续传
    3.能支持上传大于4个G的文件

    rz:
        1.只能上传小于4G的文件
        2.不支持断点续传
        3.不能传文件夹
    

    scp客户端命令: 远程拷贝
    scp--->rsync 都是用来远程拷贝
    scp是全量
    rsync是增量


    scp 支持数据的推送和拉取 windows也有scp工具 winscp

    推送文件
    [root@nfs ~]# scp 12312321 root@172.16.1.41:/root
    root@172.16.1.41's password:
    12312321 100% 49 44.2KB/s 00:00

    拉取文件
    [root@nfs ~]# scp root@172.16.1.41:/root/2 ./
    root@172.16.1.41's password:
    2 100% 4 0.5KB/s 00:00

    推送目录
    [root@nfs ~]# scp -rp /etc root@172.16.1.41:/root
    大量的小文件传输
    real 0m59.852s
    user 0m9.821s
    sys 0m21.730s

    打包之后的效果对比
        real    0m7.654s
        user    0m0.040s
        sys     0m0.065s
    

    限速 -l 单位是kb-->KB-->
    [root@nfs ~]# dd if=/dev/zero of=/root/file bs=1M count=500

    传输的速度 74MB/s 占用实际带宽 1000兆带宽
    [root@nfs ~]# scp file 172.16.1.41:/root
    root@172.16.1.41's password:
    file 100% 500MB 74.0MB/s 00:06

    80960kb/8KB/1024=10MB/s 占用实际带宽 100兆 带宽
    [root@nfs ~]# scp -l 80960 file 172.16.1.41:/root
    root@172.16.1.41's password:
    file 100% 500MB 10.0MB/s 00:50

    占用10兆带宽-->实际的传输速度1MB-->scp具体换算的单位 8000
    [root@nfs ~]# scp -l 8000 file 172.16.1.41:/root
    root@172.16.1.41's password:
    file 10% 52MB 1.0MB/s 07:22 ETA

    安全: 效率就低
    性能: 安全就差

    3.SSH验证方式

    方法一: 用户和密码
    知道服务器的IP端口,账号密码,即可通过ssh客户端命令登陆远程主机。
    ssh -p22 root@10.0.0.61
    root用户
    root密码

    简单: 简单容易被破解
    复杂: 复杂又记不住
    密码不要设定为一样:
    密码三个月更换一次:  lastpass 1passwd keepass
    
        人   ---> 道德层面---->
    

    方式二: 秘钥 ( 锁 钥匙 )
    降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。

    1.在 管理机 生成一对秘钥 ssh-keygen
    [root@m01 ~]# ssh-keygen -C xuliangwei@qq.com
    [root@m01 ~]# ll ~/.ssh/
    总用量 12
    -rw-------. 1 root root 1679 5月 24 19:16 id_rsa #私钥 生活中,钥匙
    -rw-r--r--. 1 root root 399 5月 24 19:16 id_rsa.pub #公钥 生活中,锁

    2.在 管理机 上下发公钥给 nfs服务端 (锁 公钥)
    [root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.31
    root@172.16.1.31's password: #输入需要连接的主机密码

    Number of key(s) added: 1
    Now try logging into the machine, with: "ssh 'root@172.16.1.31'"

    1. 管理机 通过ssh命令连接nfs服务器,如果能实现免密码登陆则ok (钥匙 私钥)
      [root@m01 ~]# ssh 'root@172.16.1.31'
      Last login: Fri May 24 19:24:58 2019 from 172.16.1.61
      [root@nfs ~]#

    4.将ssh登陆主机的信息放入一个文件,当我执行文件时就自动的链接到该主机了.....

    5.将从WIndows下复制好的公钥粘贴至跳板机~/.ssh/authorized_keys中,然后测试
    [root@m01 ~]# cd ; umask 077; mkdir -p .ssh ; cd .ssh
    [root@m01 .ssh]# vim authorized_keys #添加windows公钥

    塞key
    我: 公钥信息........
    你: 公网IP Port root

    扩展:
    1.测试链接无需密码
    [root@m01 ~]# ssh root@172.16.1.31
    [root@nfs ~]#

    2.可以不登录对端主机,执行命令
    [root@m01 ~]# ssh root@172.16.1.31 "ifconfig eth1"
    eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.16.1.31  netmask 255.255.255.0  broadcast 172.16.1.255
    
    3.使用scp也无需密码
    [root@m01 ~]# scp oldboy  root@172.16.1.31:/tmp
    oldboy                                           100%   26     1.9KB/s   00:00  
    

    4.ssh密码+ Google Authenticator 实现双向认证
    简单来说,就是当用户通过ssh登陆系统时,先输入google的随机验证码,然后在输入服务器的ssh密码

    [root@m01 ~]# yum -y install wget gcc make pam-devel libpng-devel pam-devel autoconf automake libtool

    [root@m01 ~]# cat ~/.google_authenticator
    SKVOCWN23G7AAPSVEDOMWX4H74
    " RATE_LIMIT 3 30 1558709812
    " WINDOW_SIZE 17
    " HOTP_COUNTER 4
    47386284
    70612256
    80548411
    83234725
    68105428

    5.SSH安全优化

    SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。

    1.更改远程连接登陆的端口
    2.禁止ROOT管理员直接登录 --普通用户--sudo提权 || 普通用户 --- su - root
    3.密码认证方式改为密钥认证
    4.重要服务不使用公网IP地址 ( 跳板机 | [ 防火墙 | 负载均衡 ] )

    SSH服务登录防护需进行如下配置调整,先对如下参数进行了解
    Port 6666 # 修改sshd服务监听的端口
    PermitRootLogin no # no代表禁止root用户直接远程连接
    PasswordAuthentication no # no代表禁止使用密码的方式连接

    UseDNS no # 禁止ssh进行dns反向解析,影响ssh连接效率参数
    GSSAPIAuthentication no # 禁止GSS认证,减少连接时产生的延迟

    将如下具体配置添加至/etc/ssh/sshd_config文件中,参数需根据实际情况进行调整

    SSH###

    Port 6666

    PasswordAuthentication no

    PermitRootLogin no

    GSSAPIAuthentication no
    UseDNS no

    END###


    Port 6666 #减少被扫描到的几率
    PermitRootLogin no #禁止root直接通过远程连接
    PasswordAuthentication no #禁止所有用户使用密码远程连接

    变更端口为6666,防止别人轻易的被扫描.
    root用户无法通过密码登录,也无法通过秘钥登录,总之就是不行.
    普通用户仅能通过秘钥登录,无法通过密码登录.


    ssh-keygen生成秘钥非交互,注意,如果存在则会提示是否覆盖.
    ssh-keygen -P "" -f ~/.ssh/id_rsa

    6.SSH安全防护
    fail2ban可以监控系统日志,并且根据一定规则匹配异常IP后使用Firewalld将其屏蔽,尤其是针对一些爆破/扫描等非常有效。

    1.开启Firewalld防火墙
    [root@bgx ~]# systemctl start firewalld
    [root@bgx ~]# systemctl enable firewalld
    [root@bgx ~]# firewall-cmd --state
    running
    2.修改firewalld规则,启用Firewalld后会禁止一些服务的传输,但默认会放行常用的22端口, 如果想添加更多,以下是放行SSH端口(22)示例,供参考:

    #放行SSHD服务端口
    [root@bgx ~]# firewall-cmd --permanent --add-service=ssh --add-service=http 
    #重载配置
    [root@bgx ~]# firewall-cmd --reload
    #查看已放行端口
    [root@bgx ~]# firewall-cmd  --list-service
    

    3.安装fail2ban,需要有epel
    [root@bgx ~]# yum install fail2ban fail2ban-firewalld mailx -y

    4.配置fail2ban规则.local会覆盖.conf文件
    [root@bgx fail2ban]# cat /etc/fail2ban/jail.local
    [DEFAULT]
    ignoreip = 127.0.0.1/8
    bantime = 86400
    findtime = 600
    maxretry = 5
    banaction = firewallcmd-ipset
    action = %(action_mwl)s

    [sshd]
    enabled = true
    filter = sshd
    port = 22
    action = %(action_mwl)s
    logpath = /var/log/secure

    5.启动服务,并检查状态
    [root@bgx ~]# systemctl start fail2ban.service
    [root@bgx ~]# fail2ban-client status sshd

    6.清除被封掉的IP地址
    [root@bgx ~]# fail2ban-client set sshd unbanip 10.0.0.1

    7.如果有ssh秘钥无法正常连接的情况,可以尝试使用如下的调试模式.开启ssh debug调试模式。
    (1)31服务器上开启临时ssh服务 /usr/sbin/sshd -p 10001 -d
    (2)61服务器上访问 ssh -vvv -p 10001 root@10.0.0.31
    (3)31服务器上查看debug日志,发现身份验证被拒绝,目录的所有权错误。
    Authentication refused: bad ownership or modes for directory /root

    相关文章

      网友评论

          本文标题:ssh远程协议

          本文链接:https://www.haomeiwen.com/subject/zqlnzqtx.html