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:匹配多个字符串在执行动作后加此命令

原文地址:https://www.cnblogs.com/Gmiaomiao/p/9072109.html