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)
sheweishewei
上一篇 2017-04-13
下一篇 2017-04-13

相关推荐

  • 26期全程班-第七周博客作业

    1、创建一个10G分区,并格式为ext4文件系统;    (1) 要求其block大小为2048, 预留空间百分比为2, 卷标为MYDATA, 默认挂载属性包含acl;    (2) 挂载至/data/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳; # fdisk /dev/sda # mkf…

    Linux干货 2017-03-17
  • 磁盘管理总结

    linux磁盘管理总结 一、向linux主机添加硬盘 不同类型的硬盘,linux需要不同的驱动。kernel需要驱动,硬盘是基本的硬件设备,驱动一般不需要安装了。 (1)linux内核的设计架构,使用了模块。除了系统必须的驱动,一般以模块方式加载到内核中。内核的模块放在。/lib/modules内。 (2)linux一切皆文件,设备也是文件,ls -l 查看…

    Linux干货 2016-08-29
  • N-22-南京-修 第三周博客作业

    #1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 [xujie@localhost ~]$ who | cut -d " " -f1 | sort -u #2、取出最后登录到当前系统的用户的相关信息。 [root@localhost xujie]# last -x | head -1 #3、取出…

    Linux干货 2016-09-15
  • 程序包管理rpm

    Linux程序包管理      API:Application Program Interface      ABI:Application Binary Interface         Unix…

    Linux干货 2016-08-23
  • linux发展史

    linux发展史简介: 20世纪60年代,MIT开发分时操作系统(Compatible TIme-Sharing System),支持30台终端访问主机;     ~主机负责运算,而终端负责输入输出; 1965年,Bell实验室、MIT、GE(通用电气公司)准备开发Multics系统,为了同时支持3…

    Linux干货 2016-10-14
  • 计算机基础入门及Pyhton基础

    编程基础 计算机基础 程序(program识别并执行的指令 计算机是执行程序的机器 现代计算机 艾伦·麦席森·图灵奠定了现在计算机的逻辑工作方式的基础 冯·诺依曼提出计算机应该有五大部件组成:输入/输出设备、运算器、控制器、输出设备。这是现代计算机基本框架。 语言基础 计算机语言:与计算机之间交互的语言 机器语言:一定位数的二进制代码成为机器指令,指令集合则…

    2017-09-16