zoukankan      html  css  js  c++  java
  • LinuxDay19——加密与安全(2)

    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

    配置文件

    /etc/ssh/ssh_config

    Host PATTERN

    StrictHostKeyChecking no 首次登录不显示检查提示

    格式

     ssh [user@]host [COMMAND]

     ssh [-l user] host [COMMAND]

    -p port:远程服务器监听的端口

    -b:指定连接的源IP

    -v:调试模式

    -C:压缩方式

    -X: 支持x11转发

    -Y:支持信任x11转发

      ForwardX11Trusted yes

    -t: 强制伪tty分配

      ssh -t remoteserver1 ssh remoteserver2

    ssh服务登录验证

    基于用户名口令登录验证

      ssh服务登录验证

      基于密钥的方式

      1首先在客户端生成一对密钥(ssh-keygen)

      2并将客户端的公钥ssh-copy-id拷贝到服务器

      3挡客户端再次发送一个连接请求,包括ip、用户名

      4服务端得到客户端的请求后,会到authorized_key中国查找,如果有相应的IP和用户,就会随机生成一个字符串;例如:acdf

      5服务器端将使用客户端拷贝过来的公钥进行加密,然后发送给客户端

      6得到服务端发来的消息后,客户端会使用私钥进行解密,然后将解密后的字符串发送给服务端

      7服务端接受到客户端发来的字符串后,根之前的字符串进行对比,如果一致,就免密码登入

     

    基于密钥的登录方式

    基于key认证

     基于密钥认证

      1)在客户端生成密钥对

       ssh -genkey -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_key中,注意权限必须为600,在登录的ssh主机上执行

      ssh -keygen -i -f Identity.pub >> .ssh/authorized_key

      5)重设私钥口令:

       ssh -keygen -p

      6)验证代理( authentication agent )保密解密后的密钥

       这样口令就只需要输入一次

       在GNOME中,代理被主动提供给root用户

       否则运行ssh -agent bash

      7)钥匙通过命令添加给代理

       ssh -add

    设置Xshell ssh登入方式

    1选择新建用户秘钥生成向导 生成公钥

    2将公钥拷贝到 /root/.ssh下

    3执行cat将公钥写入文件

    SSH端口转发

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

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

      加密 SSH Client 端至 SSH Server 端之间的通讯数据

      突破防火墙的限制完成一些之前无法建立的 TCP 连接

    本地转发:

    你处于客户端

    1、模拟防火墙及准备工作

    server ~]#yum install telnet-server

    server ~]#systemctl start telnet.socket

    ss -ntl查看是否启动

    2、搭建桥梁

    ss -ntl确认端口没有其他程序使用

    client ~]#ssh -L 9527:192.168.30.17:23(telnet机器) 192.168.30.6(server端)

    3、连接

    client ~]#telnet 172.0.0.1 9527

     

    远程转发 :

    模拟防火墙

    lanserver ~]#ssh -R 9527:192.168.30.17(telent机器)192.168.30.7(外部人员机器)

    外部人员进行连接

    X 协议转发

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

    能够通过tcp/ip连接远程X服务器

    数据没有加密机,但是它通过ssh连接隧道安全进行

      ssh -X user@remotehost gedit

    remotehost主机上的gedit工具,将会显示在本机的X服务器上

    传输的数据将通过ssh连接加密

    服务器端

    sshd,

    配置文件: /etc/ssh/sshd_config

    常用参数:

    Port

    ListenAddress ip

    LoginGraceTime 2m

    PermitRootLogin yes

    StrictModes yes 检查.ssh/文件的所有者,权限等

    MaxAuthTries 6

    MaxSessions 10 同一个连接最大会话

    PubkeyAuthentication yes

    PermitEmptyPasswords no

    PasswordAuthentication yes

    GatewayPorts no

    ClientAliveInterval:单位:秒

    ClientAliveCountMax:默认3

    UseDNS yes

    GSSAPIAuthentication yes 提高速度可改为no

    MaxStartups 未认证连接最大值,默认值10

    Banner /path/file

    限制可登录用户的办法:

    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的访问频度和并发在线数

    经常分析日志

    scp命令

    scp [options] SRC... DEST/

    两种方式:

     scp [options] [user@]host:/sourcefile /destpath

     scp [options] /sourcefile [user@]host:/destpath

    常用选项:

    -C: 压缩数据流

    -r: 递归复制

    -p: 保持原文件的属性信息

    -q: 静默模式

    -P PORT: 指明remote host的监听的端口

    rsync命令

    基于ssh和rsh服务实现高效率的远程系统之间复制文件

    使用安全的shell连接做为传输方式

    rsync –av /etc server1:/tmp 复制目录和目录下文件

    rsync –av /etc/ server1:/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> help

    pssh工具

    pssh是一个python编写可以在多台服务器上执行命令的工具,也可实现文件复制

    选项如下:

    --version:查看版本

    -h:主机文件列表,内容格式”[user@]host[:port]”

    -H:主机字符串,内容格式”[user@]host[:port]”

    -l:登录使用的用户名

    -p:并发的线程数【可选】

    -o:输出的文件目录【可选】

    -e:错误输入文件【可选】

    -t:TIMEOUT 超时时间设置,0无限制【可选】

    -O:SSH的选项

    -v:详细模式

    -A:手动输入密码模式

    -x:额外的命令行参数使用空白符号,引号,反斜线处理

    -X:额外的命令行参数,单个参数模式,同-x

    -i:每个服务器内部处理信息输出

    -P:打印出服务器返回信息

     

    dropbear

    ssh协议的另一个实现:dropbear

    源码编译安装:

    1、安装开发包组:yum groupinstall “Development tools”

    2、下载dropbear-2017.75.tar.bz2

    3、tar xf dropbear-2017.75.tar.bz2

    4、less INSTALL README

    5、./configure

    6、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"

    7、make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

    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

     

    expect

    expect 是由Don Libes基于Tcl( Tool Command Language )语言开发的,主要应用于自动化交互式操作的场景,借助Expect处理交互的命令,可以将交互过程如:ssh登录,ftp登录等写在一个脚本上,使之自动化完成。尤其适用于需要对多台服务器执行相同操作的环境中,可以大大提高系统管理人员的工作效率。

    用法:expect [ 选项 ] [ -c cmds ] [ [ -[f|b] ] cmdfile ] [ args ]

    选项:

    -c:从命令行执行expect脚本,默认expect是交互地执行的 

    -d:可以输出输出调试信息

    命令:

    spawn:启动新的进程

    send:用于向进程发送字符串

    expect:从进程接收字符串

    interact:允许用户交互

    exp_continue:匹配多个字符串在执行动作后加此命令

  • 相关阅读:
    序列化二叉树
    把二叉树打印成多行
    按之字形顺序打印二叉树
    对称的二叉树
    二叉树的下一个节点
    java ee项目用gradle依赖打包
    spring cloud gateway 拦截request Body
    oauth2学习
    docker 应用
    gradle spring 配置解释
  • 原文地址:https://www.cnblogs.com/Gmiaomiao/p/9072109.html
Copyright © 2011-2022 走看看