zoukankan      html  css  js  c++  java
  • SSH

    author:JevonWei
    版权声明:原创作品


    SSH

    • 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结构
      Client:ssh,scp,sftp
      Windows客户端:
      xshell,putty,securecrt, sshsecureshellclient
      Server: sshd

    ssh 客户端

    • ssh, 配置文件:

      /etc/ssh/ssh_config
      Host PATTERN
      StrictHostKeyChecking no 首次登录不显示检查提示

    image

    • 格式:ssh [user@]host [COMMAND]

      ssh [-l user] host [COMMAND]
      -p port:远程服务器监听的端口
      -b: 指定连接的源IP
      -v: 调试模式
      -C:压缩方式
      -X:图形化连接
      -Y:支持信任x11转发
      ForwardX11Trusted yes
      -t:强制伪tty分配
      ssh -t remoteserver1 ssh remoteserver2

    • 允许实现对远程系统经验证地加密安全访问

    • 当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub (CentOS7 默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts 中。下次连接时,会自动匹配相应私钥
      ,不能匹配,将拒绝连接

    基于key 认证

    • 基于密钥的认证:

      (1)在客户端生成密钥对
      ssh-keygen -t rsa [-P ''] [-f “~/.ssh/id_rsa"]
      (2)把公钥文件传输至远程服务器对应用户的家目录
      ssh-copy-id [-i [identity_file]] [user@]host
      (3)测试
      (4)在SecureCRT或Xshell实现基于key验证

      在SecureCRT 工具—> 创建公钥—> 生成Identity.pub文件转化为openssh 兼容格式(适合SecureCRT ,Xshell不需要转化格式),
      并复制到需登录主机上相应文件authorized_keys中,注意权限必须为600,在需登录的ssh主机上执行:
      ssh-keygen -i -f Identity.pub >> .ssh/authorized_keys
      (5)重设私钥口令:#ssh-keygen –p
      (6)验证代理(authentication agent)保密解密后的密钥
      这样口令就只需要输入一次
      在GNOME中,代理被自动提供给root用户
      否则运行ssh-agent bash
      (7)钥匙通过命令添加给代理
      ssh-add

    SSH 端口转发

    • 什么是SSH端口转发?
      SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据。但是,SSH还能够将其他TCP端口的网络数据通过SSH链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”
      (tunneling),这是因为SSH他为其他TCP链接提供了一个安全的通道来进行传输而得名。例如,Telnet,SMTP,LDAP些 这些TCP应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH的连接,也能够将通过将TCP端口转发来使用SSH进行通讯

    • SSH端口转发能够提供两大功能:

      加密SSH Client端至SSH Server端之间的通讯数据
      突破防火墙的限制完成一些之前无法建立的TCP

    SSH端口转发

    本地转发:
        -L localport:remotehost:remotehostport sshserver
    选项:
        -f 后台启用
        -N 不打开远程shell,处于等待状态
        -g 启用网关功能
        
    示例
        ssh –L 9527:telnetsrv:23 -N sshsrv
        telnet 127.0.0.1 9527
        当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
            data <- -> localhost:9527  <- -> localhost:XXXXX  <- ->
            sshsrv:22 <- -> sshsrv:YYYYY <- -> telnetsrv:23
    
    远程转发:
        -R sshserverport:remotehost:remotehostport sshserver
    示例:
        ssh –R 9527:telnetsrv:23 –N sshsrv
        让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端,再由本机解密后转发到telnetsrv:23
            Data <- -> sshsrv:9527 <- -> sshsrv:22 <- -> localhost:XXXXX <- -> localhost:YYYYY <- -> telnetsrv:23
    动态端口转发:
        当用firefox访问internet时,本机的1080端口做为代理服务器,firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
        在本机firefox设置代理socket proxy:127.0.0.1:1080
            ssh -D 1080 root@sshserver
    

    X协议转发

    • 所有图形化应用程序都是X 客户程序

      能够通过tcp/ip连接远程X服务器
      数据没有加密机,但是它通过ssh 连接隧道安全进行

    • ssh -X user@remotehost gedit

      remotehost主机上的gedit工具,将会显示在本机的X服务器上
      传输的数据将通过ssh连接加密

    ssh服务器

    • 服务器端:sshd

      man sshd_config
      配置文件:/etc/ssh/sshd_config(服务端)
      /etc/ssh/ssh_config(客户端)
      常用参数:
      Port 端口号
      AddressFamily any 指明可使用ipv4和ipv6地址
      ListenAddress 0.0.0.0 监听的IP
      #SyslogFacility AUTH 意为日志存放在/var/log/secure
      SyslogFacility AUTHPRIV 日志级别
      #LoginGraceTime 2m 等待连接宽限时间2分钟
      #PermitRootLogin yes 禁止root用户直接登录
      #StrictModes yes 限制模式
      #MaxAuthTries 6 密码输入错误次数为3时退出
      #MaxSessions 10 同一个主机的最大会话数为10次
      #ClientAliveInterval 0 客户端的活动间隔 (单位:秒) #ClientAliveCountMax 3 客户端最大活动间隔统计次数
      UseDNS yes 使用DNS反向解析IP
      PidFile /var/run/sshd.pid PID文件
      MaxStartups 最大允许保持多少个未认证连接,默认值10
      #Banner /etc/ssh.txt ssh连接时提示信息文件
      PsswordAuthentication yes 基于密码认证登录
      PermitEmptyPasswords no 基于key认证的登录

        限制可登录用户的办法:
            AllowUsers user1 user2 user3   允许用户连接
            DenyUsers  拒绝用户
            AllowGroups 允许组
            DenyGroups
        DenyUser的优先级大于AllowUsers
      

    ssh服务的最佳实践

    要使用默认端口
    禁止使用protocol version 1
    限制可登录用户
    设定空闲会话超时时长
    利用防火墙设置ssh访问策略
    仅监听特定的IP地址
    基于口令认证时,使用强密码策略
        tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30| xargs
    使用基于密钥的认证
    禁止使用空密码
    禁止root用户直接登录
    限制ssh的访问频度和并发在线数
    做好日志,经常分析
    

    编译安装dropbear示例

    • ssh协议的另一个实现:dropbear

      安装准备:
      1、安装开发包组:
      2、ftp://172.16.0.1/pub/Sources/sources/dropbear/dropbear-2013.58.tar.bz2
      安装:
      3、tar xf dropbear-2013.58.tar.bz2,
      4、less INSTALL
      5、./configure
      6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
      7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install
      启动ssh服务:
      8、ls /usr/local/sbin/ /usr/local/bin/
      9、/usr/local/sbin/dropbear -h
      10、mkdir /etc/dropbear
      11、dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
      12、dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
      13、dropbear -p :2222 -F –E #前台运行
      dropbear -p :2222 #后台运行
      客户端访问:
      14、ssh -p 2222 root@127.0.0.1
      15、dbclient -p 2222 root@127.0.0.1

    danran
  • 相关阅读:
    基于kubernetes v1.17部署dashboard:v2.0-beta8
    kubeadm快速部署Kubernetes单节点
    kafka数据可靠性深度解读
    MySql中4种批量更新的方法
    如何分析Mysql慢SQL
    企业级SSD市场接口之争:SATA会被NVMe取代吗?
    强势回归,Linux blk用实力证明自己并不弱!
    影响性能的关键部分-ceph的osd journal写
    文章汇总(包括NVMe SPDK vSAN Ceph xfs等)
    NVMe over Fabrics:概念、应用和实现
  • 原文地址:https://www.cnblogs.com/JevonWei/p/7231348.html
Copyright © 2011-2022 走看看