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

posted @ 2017-07-24 21:53  JevonWei  阅读(316)  评论(0编辑  收藏  举报