美文网首页
Linux之openssh服务

Linux之openssh服务

作者: 魏镇坪 | 来源:发表于2016-03-07 13:45 被阅读1117次

    OpenSSH简介

    OpenSSH是SSH(Secure Shell)协议的免费开源实现,SSH协议族可以用来进行远程控制 ,或在计算机之间传送文件, 而实现此功能的传统方式,如telnet(终端仿真协议),rcp,ftp,rlogin,rsh都是极为不安全的,并且会使用明文传送密码,OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据 ,并由此来代替原来的类似服务.目前OpenSSH是OpenBSD的子计划.

    OpenSSH的工作特性

    • C/S架构,工作在22/TCP端口

      • Client端软件
        • XShell
        • Securecrt
        • Putty
    • 使用非对称加密算法进行来源主机身份确认

      • 当客户端第一次连接服务端时, 服务端会将其公钥发送给客户端, 并且提示用户接受公钥信息,并保存至用户家目录下.ssh目录下的known_host文件中. 在下一次连接的时候,如果对方公钥与之文件中对应的主机不符合时,将拒绝连接
    • 使用DH算法进行密钥交换

      • 在连接过程中,SSH的传输使用DH交换密钥机制生成的密钥加密数据(是使用对称加密算法).默认每隔一个小时会重新协商加密密钥.
    • 默认不允许root用户远程登陆系统

    • 私钥存放在本地,公钥存放在对方known_host文件中

    • 用户登录认证机制:

      • 基于口令的认证 : 用户输入帐号和密码
      • 基于密钥的认证 : 用户提供一对儿密钥,私钥保留在本地,公钥存在远程服务端的用户家目录下.ssh/known_host文件中.
        • 支持的密钥加密方法
          • RSA
          • DSA
          • ECDSA
          • ED25519

    ssh protocol version

    • V1 : 不安全,建议不使用
    • V2 : 目前主流版本

    OpenSSH的配置文件

    • SSH服务端
      • /etc/ssh/sshd_config
    • SSH客户端
      • /etc/ssh/ssh_config

    OpenSSH的服务进程

    • Centos 6
      • service sshd start
    • Centos 7
      • systemctl start sshd

    OpenSSH客户端工具的使用

    • 使用格式
      • ssh [options] [user@host []COMMMAND]

      • ssh -l user host [command]

      • OPTIONS

        • -l USER : 以指定的用户登录远程主机,跟user@功能一样

        • -p PORT : 用于指明远程服务端的端口

        • -X : 支持X11转发

        • -Y : 支持信任的X11转发

          X: 是x-window的协议
          11: 是其x-window的版本号
          
        • -o stricHostKeyChecking=no : 不作严格的key

    使用公钥认证连接主机

    • ssh-keygen命令

      • 格式格式
        • ssh-keygen -q -b BITS -t TYPE [-f output_keyfile] [-p PASSWORD]

        • OPTIONS

          • -t TYPE : 密钥的算法类型,如rsa,dsa,ecdsa,ed25519
          • -b BITS : 指明密钥长度
          • -p PASSWORD : 私钥加密密码
          • -f OUTPUT_KEYFILE : 生成密钥的保存位置,生成有密码将会保存到/etc/ssh/目录下, 私钥与公钥成对出现 ,公钥以Pub后缀结束
          • -q : 静默模式
    • 操作步骤

      • 1 在本地主机生成一对儿密钥
      ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
      
      • 2 在本地主机上, 将公钥复制到要登录的远程主机的用户家目录下的特定文件中(~/.ssh/authorized_keys)
      ssh-copy-id -i .ssh/id_rsa.pub root@172.16.100.68
      
      ssh-copy-id命令是ssh自带的文件传输工具, 就以将通过-i参数指定的文档自动传输到指定主机指定用户家目录文件中.
      

    scp命令(基于ssh连接完成复制)

    • [options]

      • -r : 递归复制
      • -p : 保持原文件的权限信息
      • -q : 静默模式
      • -P PORT : 指定远程主机的ssh协议监听的端口
      scp ~/.ssh/id_rsa root@172.16.36.70:/root/  
      

    sftp命令

    sftp也是一个C/S架构, 服务端由SSHD服务进程管理, 是SSHD的一个子系统,在Centos系统上的openssh,默认启用. Client是sftp

    使用格式: sftp user@host
    

    sshd配置文件: /etc/sshd_config

    • 文本格式:

      • 配置指令 值
    • 常用指令

      • port 22 : 监听的端口
      • ListenAddress 0.0.0.0 : 监听的地址
      • AddressFminy any : ipv4,ipv6的地址
      • keyregenerationInterval 1H: 密钥更新时长
      • ServerKeybits 1024 : 对称密钥长度
      • LoginGraceTime 2m : 用户登陆的等待时长
      • premiRootLogin yes : 是否允许管理员远程登陆
      • StricModes yes : 是否使用严格模式
      • Maxauthtries 6 : 密码错误重度次数
      • MaxSessions 10 : 最大会话连接数,基也是使用子进程响应用户请求
      • RSAuthentication yes : 是否支持基于密钥的认证功能
      • Pubkeyauthentication yes : 是否支持基于公钥的认证功能(以上一项一同使用)
      • RhostsRSAAuthentication yes : 如果在known_host文件中不存在, 就不连接, 默认是关闭的,值为No
      • HostBaseauthentication no : 是不是必须使用密钥进行认证
      • passwordauthentication yes : 是否允许基于口令的认证方式
      • challengeresponseauthentication no : 挑战式身份认证
      • kerberos : 基于对称加密的统一解决方案
      • usepam yes : 认证过程基于pam完成
      • AcceptEnv : 接受那些环境变量
      • printmotd yes : 是否在登录的时候打印motd信息,文件在/etc/motd中
      • printLastlog yes : 是否显示上一次登陆信息
      • usedens no : 当用户访问sshd服务时, sshd会反解客户端的ip地址,默认为yes, 建议关闭
      • subsystem sftp /usr/libexec/openssh/sftp-server : 调用时需要使用sftp-server的全路径
      • allowusers user1 user2 user3.... : 允许指定用户才能登陆sshd
      • allowgroups mygrp1 mygrp2 mygrp3....: 允许指定组的用户才能登陆sshd
      • denyusers user1 user2 user3.... : 拒绝指定用户
      • denygroups mygrp1 mygrp2 mygrp3....: 拒绝指定组
      deny的动作优先级高于所有allow, allow是做白名单, deny是做黑名单
      

    ssh相关的man手册

    • man sshd_config : 查看sshd的配置选项
    • man sshd
    • man ssh_config : 查看客户端的配置选项
    • man ssh

    SSH服务的最佳实践

    • 1 不要使用默认端口
    • 2 禁止使用协议版本V1 (protocol version 1)
    • 3 限制可登陆的用户(最好做白名单)
    • 4 设定空闲会议超时时长
    • 5 利用防火墙设置ssh访问策略
    • 6 仅监听特定的IP地址(一般只监听私网上的IP地址)
    • 7 基于口令认证时,要使用强密码策略
      • 生成随机密码方法: tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
    • 8 使用基于密钥的认证
    • 9 要禁止使用空密码登录
    • 10 禁止root用户直接登录
    • 11 限制ssh的访问频度和并发在线数
    • 12 做好日志,经常分析
      • 日志存放: /var/log/secure

    Linux之dropbear

    ssh协议的另一个实现, 轻量化ssh的实现方案,多用于嵌入式环境中

    轻量化的实现方案,多用于嵌入式环境中
        
        dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key
        dropbearkey -t ecdsa  -s 512 -f /etc/dropbear/dropbear_ecdsa_host_key
    
        dropbear  -p 2202 -F -E 
    
        常用工具:
            dbclient : 客户端程序
            dropbearkey : 主机密钥生成工具
                /etc/dropbear 
        服务端程序 :
            dropbear 
                -p [ip:]Port
                -F : 前台 运行
                -E : 将日志发往错误输出
    

    相关文章

      网友评论

          本文标题:Linux之openssh服务

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