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,  配置文件:/etc/ssh/ssh_config
          Host PATTERN
                StrictHostKeyChecking no  首次登录不显示检查提示
                首次登陆公钥存放位置:/root/.ssh/known_hosts
                  格式:ssh [user@]host [COMMAND]
    ssh root@172.18.12.14 ‘uname -r’   #默认同当前用户

    ssh [-l user] host [COMMAND]       
          -p port :远程服务器监听的端口     #默认22端口
                更改端口文件:/etc/ssh/sshd_config  里面的port,
                              更改后需要重启服务,需要关闭selinux
          -b: 指定连接的源IP
                ip addr add 192.168.33.15./24 dev etho  #给网卡加别名
                ssh -b 
          -v: 调试模式
          -C :压缩方式
          -X:  支持x11 转发                #使用远程主机图形工具
          -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 中。
    下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接

基于密钥的认证:
 (1)  在客户端生成密钥对
          ssh-keygen -t rsa [-P ”] [-f “~/.ssh/id_rsa”]
          #[]都可以省略,直接ssh-keygen,该命令可以补全
 (2)  把公钥文件传输至远程服务器对应用户的家目录
          ssh-copy-id [-i [identity_file]] [user@]host
          #ssh-copy-id  -i ~/.ssh/id_rsa  shewei@172.18.12.11
                                默认自动拷贝公钥,路径要选择文件所在目录
 (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                #先用6验证代理,然后7添加到代理,每次重启失效

scp 命令:
       scp [options] SRC… DEST/
    两种方式:
        scp [options] [user@]172.18.12.12 : /sourcefile  /destpath
                            远程到本地
        scp [options] /sourcefile [user@]172.18.12.12:/destpath
                            本地到远程
  常用选项:
        -C:  压缩数据流
        -r:  递归复制              #复制目录需要递归
        -p:  保持原文件的属性信息
        -q:  静默模式
        -P PORT:  指明remote host 的监听的端口

rsync 命令:
基于ssh 和rsh 服务实现高效率的远程系统之间复制文件
  使用安全的shell 连接做为传输方式
        • rsync –av /etc 172.18.12.11:/tmp   复制目录和目录下文件
        • rsync –av /etc/ 172.18.12.11:/tmp  只复制目录下文件
                        目标地址,注意 / 有区别
        比scp 更快,只复制不同的文件,
  选项:
    -n  模拟复制过程
    -v  显示详细过程
    -r  递归复制目录树
    -p  保留权限
    -t  保留时间戳
    -g  保留组信息
    -o  保留所有者信息
    -l 把 把 符号链接文件做为符号文件 进行复制(默认)
    -L  将软链接文件指向文件复制
    -a  存档,相当于–rlptgoD ,但不保留ACL (-A )和SELinux 属性(-X) )

交互式文件传输工具sftp 命令:
    用法和 传统的ftp 工具相似
    利用ssh 服务实现安全的文件上传和下载
    使用ls cd mkdir rmdir pwd get put 等指令, 可用?或help获取帮助信息
        sftp [user@]host     #sftp 172.18.12.11
        sftp> help

什么是SSH 端口转发?
      SSH 会自动加密和解密所有 SSH  客户端与服务端之间的网络数据。
      但是,SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发\ 
      并且自动提供了相应的加密及解密服务。这一过程也 被叫做“隧道”
     (tunneling ),这是因为 SSH 为其他 TCP  链接提供了一个安全的通
      道来进行传输而得名。例如,Telnet ,SMTP ,LDAP 些 这些 TCP 应用均
      能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时,
      如果工作环境中的防火墙限制了一些网络端口的使用,但是允许
      SSH的连接 ,也能够通过将 TCP 端口转发来使用 SSH 进行通讯
  SSH  端口转发能够提供两大功能:
        • 加密 SSH Client 端至 SSH Server 端之间的通讯数据
        • 突破防火墙的限制完成一些之前无法建立的 TCP 连接
本地转发:
      -L localport:remotehost:remotehostport sshserver
         选项:
      -f  后台启用
      -N  不打开 远程shell ,处于等待状态
      -g  启用网关功能
         示例 :                 #需要再客户端运行
      ssh -L  9527:172.18.12.11:23 172.18.12.12
          开启本地9527端口到目标主机23端口,同时开启本地随机端口到
          跳板机ssh端口22,经过跳板机172.17.12.12
          然后访问本机的9527 的端口时,被加密后转发到跳板机的ssh 服务,
          在本机打开另外客户端 :访问  #telnet 127.0.0.1 9527 可到达目标
可这样理解:    Data ——sshsrv:9527 ——–sshsrv:22——-
            localhost:XXXXX ——localhost:YYYYY——-telnetsrv:23 

      远程转发:
          -R sshserverport:remotehost:remotehostport sshserver
     示例:
          ssh –R 9527:telnetsrv:23 –N sshsrv

          ssh -R 9527:目标主机地址:23 -N 客户端地址

              # ssh -R 9527:172.182.12.11:23  -N  客户端地址 

          然后客户端运行: #telnet 127.0.0.1 9527 可到达目标
          让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
          ssh -D 9527 172.18.12.12  #打开本地端口9527,指定代理地址
          然后在linux浏览器中高级设置网络中填写127.0.0.1 9527,保存访问

服务器端:sshd, 配置文件: /etc/ssh/sshd_config
          服务器软件包:openssh-server
   常用参数:
        Port
        ListenAddress ip
        PermitRootLogin yes
        ClientAliveInterval 和ClientAliveCountMax   
        UseDNS         #反向解析域名   no  不允许
        MaxStartups  最大允许保持多少个未认证连接 。默认值10
        MaxSessions  同一个连接最大会话最大默认100
        限制可登录用户的办法:
        AllowUsers user1 user2 user3             #白名单
        DenyUsers                                #黑名单
        AllowGroups                              #组的白名单
        DenyGroups                               #组的黑名单

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

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”          #安装的功能,直接make都安装
          • 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 -FE       # 前台运行  
                 dropbear -p 2222           # 后台运行
            客户端访问:
          • 14 、ssh -p 2222 root@127.0.0.1   
          • 15 、dbclient -p 2222 root@127.0.0.1   

AIDE:    #高级的入侵检测环境
        当一个入侵者进入了你的系统并且种植了木马,通常会想
        办法来隐蔽这个木马(除了木马自身的一些隐蔽特性外,
        他会尽量给你检查系统的过程设置障碍),通常入侵者会
        修改一些文件,比如管理员通常用ps -aux 来查看系统进
        程,那么入侵者很可能用自己经过修改的ps 程序来替换掉
        你系统上的ps 程序,以使用ps 命令查不到正在运行的木马
        程序。如果入侵者发现管理员正在运行crontab 作业,也
        有可能替换掉crontab 程序等等。所以由此可以看出对于
        系统文件或是关键文件的检查是很必要的。目前就系统完
        整性检查的工具用的比较多的有两款:Tripwire 和AIDE
        ,前者是一款商业软件,后者是一款免费的但功能也很强
        大的工具
AIDE(Adevanced Intrusion Detection Environment)
   • 高级入侵检测环境) 是一个入侵检测工具,主要用途是检查文件的
         完整性,审计计算机上的那些文件被更改过了。
   • AIDE 能够构造一个指定文件的数据库,它使用aide.conf 作为其配
        置文件。AIDE 数据库能够保存文件的各种属性,包括:权限
        (permission) 、索引节点序号(inode number) 、所属用户(user)、
        所属用户组(group) 、文件大小、最后修改时间(mtime) 、创建时间
        (ctime) 、最后访问时间(atime) 、增加的大小以及连接数。AIDE
        还能够使用下列算法:sha1 、md5 、rmd160 、tiger ,以密文形式
        建立每个文件的校验码或散列号.
   • 这个数据库不应该保存那些经常变动的文件信息,例如:日志文件
       、邮件、/proc 文件系统、用户起始目录以及临时目录.

安装
    yum install aide
   修改配置文件
        vim /etc/aide.conf   ( 指定对哪些文件进行检测)
    例如:
      #  matches. e.g. Put file matches before directories.
         /app DATAONLY           #监控此目录 后面是监控的内容
         !/app/f1                      #这表示不监控此文件
     注意:默认 matches下面有很多监控目录,建议删除,自己选择目录监控
      更改完成后生成数据库:aide –init  
      然后找到对应的数据库目录/var/lib/aide/ 把文件改名,删除其中的new
      使用aide –check 检测,
      中途做了修改可以更新数据库或者重新生成,使用时需要重命名,删除new

      技巧:export EDITOR=vim     #设置模式编辑器vim,
sudo: 
      sudo 能够授权指定用户在指定主机上运行某些命令, 
           如果未授权用户用尝试使用sudo
      sudo 可以提供日志,记录每个用户使用sudo
      sudo 为系统管理员提供配置文件,允许系统管理员集中地
           管理用户的使用权限和使用的主机
      sudo 使用时间戳文件来完成类似“检票”的 系统,默认存
           活期为5 分钟的 “入场券”
     通过visudo 命令编辑配置文件,具有语法检查功能
  配置文件:/etc/sudoers, /etc/sudoers.d/
  时间戳文件:/var/db/sudo
  日志文件:/var/log/secure
  配置文件支持使用通配符glob: :
          ?: 任意单一字符
          * :匹配任意长度字符
       [wxc]: 匹配其中一个字符
      [!wxc]: 除了这三个字符的其它字符
           \x :  转义
  [[alpha]] : 字母 : 示例: /bin/ls [[alpha]]*
  配置文件规则有两类 ;
      1 、别名定义: 不是必须的
      2 、授权规则: 必须的

授权规则格式:   #使用 :visudo命令,更改规则
       用户  登入主机=( 代表用户)  命令
       示例:
           root ALL=(ALL) ALL           #其中命令需要绝对匹配,少个/都不行
    exam:   shewei  ALL=/bin/cat   /etc/shadow,/bin/mount /dev/sr0/ /mnt/
      注意:这里的root是个安全漏洞,如果root是普通用户,可以代替管理员操作
            su -u 管理员 passwd 管理员    #可以直接运行管理员命令
  格式说明:
          user:  运行命令者的身份 
          host:  通过哪些主机
     (runas) : 以哪个用户的身份
       command:  运行哪些命令             #这里可以直接选择目录/bin
       用户和命令都支持别名定义:
                User_Alias NETADMIN= netuser1,netuser2
                Cmnd_Alias NETCMD = /usr/sbin/ip
                NETADMIN ALL= (root) ) NETCMD
                !/usr/bin/passwd root        #排除此命令
      注意:  %wheel  ALL=(ALL)       ALL   #这个组里的用户权限也大
 
sudo 命令:             

ls -l /usr/bin/sudo

    sudo –i –u wang  切换身份
    sudo [-u user] COMMAND
        -V  显示 版本 信息等配置信息
        -u  user 默认为root
        -l  列出用户在主机上可用的和被禁止的命令
        -K  与-k 类似,还要删除 时间戳文件
        -b  在后台执行指令

原创文章,作者:shewei,如若转载,请注明出处:http://www.178linux.com/73257

(0)
上一篇 2017-04-13 14:02
下一篇 2017-04-13 17:18

相关推荐

  • 马哥教育网络19期+第十二周课程练习

    1、请描述一次完整的http请求处理过程; a.向根域名服务器请求解析域名,然后根服务器返回相应的IP信息; b.用户的Web浏览器向服务器端的80端口通过三次握手建立TCP连接; c.建立完TCP连接后发送HTTP请求,请求的格式包括请求方法、URL和协议版本号,方法有GET、HEAD、POST、PUT、DELETE、OPTIONS、TRACE,如: &n…

    Linux干货 2016-08-22
  • M22 Centos设置yum源方法

    实验目的: 使用虚拟机模拟建立yum源服务器,在客户机上指定yum源为该服务器。 实验器材: WMware12安装Centos6.8虚拟机作为yum服务源 WMware12安装Centos7.3 作为客户端访问yum源服务器 实验原理图: 实验过程: 服务器端: 1、  显示已经挂载的光盘 #cd /misc/cd #先执行此命令才可以看到光盘挂载…

    2017-03-06
  • 22期第十二周课堂练习

    1、请描述一次完整的http请求处理过程; (1)建立和处理连接:接收请求或者拒绝请求; (2)接收请求:接收来自于网络上的主机请求报文中对某特定的资源的一次请求的过程; (3)处理请求:对请求报文进行解析,获取客户端请求的资源及请求方法等相关信息 (4)访问资源:获取请求报文中请求的资源 (5)构建响应报文; (6)发送响应报文; (7)记录日志; 2、h…

    Linux干货 2016-12-26
  • 12.http学习与应用实现

    1、请描述一次完整的http请求处理过程; 1)建立或处理连接:客户端发送http请求报文,服务器端接收或拒绝请求; 2)接收请求:服务器端接收来自客户端对某些资源的请求; 3)处理请求:服务器端解析客户端请求报文,获取客户端请求的资源及请求方法等信息; 4)访问资源:服务器端获取客户端请求的资源; 5)构建响应报文; 6)发送响应报文; 7)日志记录; 2…

    2017-09-20
  • free / buffer与cache

           前几天看到有些伙伴傻傻分不清楚buffer与cache的用处,后来发现我也不能很清楚的说出来buffer与cache在不同的地方有什么不同之处,这里就总结了一些关于buffer于cache的区别,如有不完善的地方,请大家指出来。        说到buffer与ca…

    2017-07-17
  • 设计模式 ( 十二 ) 职责链模式(Chain of Responsibility)(对象行为

    1.概述        你去政府部门求人办事过吗?有时候你会遇到过官员踢球推责,你的问题在我这里能解决就解决,不能解决就推卸给另外个一个部门(对象)。至于到底谁来解决这个问题呢?政府部门就是为了可以避免屁民的请求与官员之间耦合在一起,让多个(部门)对象都有可能接收请求,将这些(部门)对象连接成一条链,并且沿着这条链传递…

    Linux干货 2015-07-15