• ssh


    secure shell, protocol, 22/tcp, 安全的远程登录

    具体的软件实现:

    OpenSSH: ssh协议的开源实现,CentOS默认安装
    dropbear:另一个开源实现

    SSH协议版本

    v1: 基于CRC-32做MAC,不安全;man-in-middle
    v2:双方主机协议选择安全的MAC方式
      基于DH算法做密钥交换,基于RSA或DSA实现身份认证

    两种方式的用户登录认证:

    基于password
    基于key

    Openssh软件组成 

    相关包:

    openssh
    openssh-clients
    openssh-server

    工具:

    基于C/S结构

    Linux Client:

      ssh, scp, sftp,slogin

    Windows Client:

      xshell, putty, securecrt, sshsecureshellclient

    Server:

      sshd

    ssh客户端

     
    配置文件:/etc/ssh/ssh_config 
      StrictHostKeyChecking no 首次登录不显示检查提示
    格式:ssh [user@]host [COMMAND]
    ssh [-l user] host [COMMAND]
     常见选项
      -p port:远程服务器监听的端口
      -b:指定连接的源IP
      -v:调试模式
      -C:压缩方式
      -X:支持x11转发
      -t:强制伪tty分配
        ssh -t remoteserver1 ssh -t remoteserver2 ssh remoteserver3。注意使用场景。例如某个公司有ABCD四台主机,配置以下策略,只允许A连B,B连C,C连D。当要连接D主机时,此时可以使用-t选项。ssh -t A ssh -t B ssh -t C ssh  D。
    注意:
    当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接。如下图

    sshd

    ssh配置优化

    端口不使用默认22
    GSSAPIAuthentication  yes   提高速度可改为no 
    UseDNS yes                提高速度可改为no。为yes会通过dns将IP解析为域名。
    ClientAliveInterval  300  检查客户端是否活动连接的间隔时长,单位:秒 
    u  ClientAliveCountMax  0  检查客户端是否活动连接的次数, 默认3此。和上一项配合使用,300秒内误操作自动退出

    sshd部分配置项说明

    #LoginGraceTime 2m  ssh链接后等待输入密码的时长。
    MaxAuthTries   6   到达配置值的一办就会退出
    ClientAliveInterval  0  检查客户端是否活动连接的间隔时长,单位:秒 
    ClientAliveCountMax  3 检查客户端是否活动连接的次数, 默认3此
    MaxStartups 10:30:100  ssh并发连接在10个以下时全部允许ssh到本机。超过十个且小于100个,则随机挑选30%个拒绝链接,超过100个则全部拒绝

    ssh企业应用配置建议

    Port 22 :不要使用默认端口;
    AllowUsers限制可登录的用户;
    ClientAliveCountMax,ClientAliveInterval设定空闲会话超时时长;
    ListenAddress 0.0.0.0仅监听特定的IP地址; PermitEmptyPasswords no #禁止使用空密码; PermitRootLogin禁止root用户直接登录; MaxAuthTries,MaxSessions限制ssh的访问频度和并发在线数; 做好日志,经常分析; /vat/log/secure
    禁止使用protocol version 1
    使用基于密钥的认证;
    基于口令认证时,使用强密码策略;
         随机数生成命令
        # tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
        #openssl rand -base64 30

    利用防火墙设置ssh访问策略;

    ssh公钥交换步骤

    客户端发起链接请求
    服务端返回自己的公钥,以及一个会话ID(这一步客户端得到服务端公钥)
    客户端生成密钥对
    客户端用自己的公钥异或会话ID,计算出一个值Res,并用服务端的公钥加密
    客户端发送加密后的值到服务端,服务端用私钥解密,得到Res
    服务端用解密后的值Res异或会话ID,计算出客户端的公钥(这一步服务端得到客户端公钥)
    最终:双方各自持有三个秘钥,分别为自己的一对公、私钥,以及对方的公钥,之后的所有通讯都会被加密

    ssh加密通信

    client和server都用对方的公钥加密,传输数据。用自己的私钥解密,获取数据。
     

    ssh服务验证登录

    ssh服务登录验证方式

    用户/口令
    基于密钥

    基于用户和口令登录验证

    在进行公钥交换后,用户会根据服务器发来的公钥对密码进行加密,加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功。
     

    ssh服务基于密钥登录验证(免密登录)

    双方都使用对方的公钥加密同一个字符串,然后发给对方,解密后比对字符串是否一致。

    1 首先在客户端生成一对密钥(ssh-keygen)
    2 并将客户端的公钥ssh-copy-id 拷贝到服务端
    3 当客户端再次发送一个连接请求,包括ip、用户名
    4 服务端得到客户端的请求后,会到authorized_keys中查找,如果有响应的IP和用户,就会随机生成一个字符串,例如:1qazwsx
    5 服务端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端
    6 得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端
    7服务端接受到客户端发来的字符串后,跟之前的字符串进行对比,如果一致,就允许免密码登录

    linux主机之间基于密钥的认证:

    (1) 在客户端生成密钥对
    ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
    (2) 把公钥文件传输至远程服务器对应用户的家目录
    ssh-copy-id [-i [identity_file]] [user@]host

    使用xshell连接linux基于密钥的认证:

     (1)使用xshell生成公钥(下面第一张图和第二张图,)

     (2)将公钥复制到目标linux主机,并导入到 ~/.ssh/authorized_keys:ssh-keygen -i -f id_rsa_2048.pub >> .ssh/authorized_keys

     (3)在使用xshell登录时选择密钥登录(第三张图)

     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    简要概括java技术体系
    我的学习之旅
    Ubuntu18.04系统执行语句时出现错误Failed to load module "canberra-gtk-module"
    USRPX310 在GNU Radio上更改通道A或B
    ubuntu18.04 安装UHD+GNU Radio教程
    安装WIN10+Ubuntu18.04安装教程(实测有效)
    信道编码
    IQ基础
    清除LabVIEW中波形图表或波形图中的历史数据
    LabVIEW中的波形图表(Chart)与波形图(Graph)
  • 原文地址:https://www.cnblogs.com/wxxjianchi/p/13511709.html
Copyright © 2020-2023  润新知