2.1 ssh服务

SSH服务

ssh: secure shell, protocol, 22/tcp, 安全的远程登录

1 SSH是标准的网络协议,可用于大多数UNIX操作系统,能够实现字符界面的远程登录管理,它默认使用22号端口,采用密文的形式在网络中传输数据,相对于通过明文传输的Telnet,具有更高的安全性。

2 SSH协议版本
v1: 基于CRC-32做MAC,不安全;man-in-middle
v2:双方主机协议选择安全的MAC方式基于DH算法做密钥交换,基于RSA或DSA实现身份认证

3 两种方式的用户登录认证:
基于password
基于key

两种验证有何不同之处

这两者都是通过密文传输数据的。
不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的密码具有足够的复杂度才能具有更高的安全性。
而基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器。这种方式是相当安全的。

OpenSSH

基于C/S结构

ssh, 配置文件:/etc/ssh/ssh_config

ssh客户端

语法:ssh [选项][用户@] host [命令]

选项

扫描二维码关注公众号,回复: 3202321 查看本文章

-p:远程服务器监听的端口
-b:指定连接的源IP
-v:调试模式
-C:压缩方式
-X:支持x11转发
-t:强制伪tty分配

ssh -t remoteserver1 ssh remoteserver2

SSH客户端

1 允许实现对远程系统经验证地加密安全访问
2 当用户远程连接ssh服务器时,会复制ssh服务器/etc/ssh/ssh_host*key.pub(CentOS7默认是ssh_host_ecdsa_key.pub)文件中的公钥到客户机的~./ssh/know_hosts中。下次连接时,会自动匹配相应私钥,不能匹配,将拒绝连接。

基于passwd验证原理

1 客户端发起ssh请求,服务器会把自己的公钥发送给用户

2 用户会根据服务器发来的公钥对密码进行加密

3 加密后的信息回传给服务器,服务器用自己的私钥解密,如果密码正确,则用户登录成功

2.1 ssh服务

基于key验证原理

2.1 ssh服务

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

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

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

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

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

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

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

实现

基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到SSH服务器上时,客户端软件就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端软件(putty,xshell等)。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器,这种方式是相当安全的。

步骤:
1、在客户端生成一对密钥
2、将公钥传输至服务器端某用户的家目录下的 .ssh/authorized_keys 文件中(多个公钥需要进行追加)
3、测试登录
首先,我们需要生成一对密钥

基于key验证登录

  1. 在客户端生成密钥对

    [root@CentOS7 .ssh]# ssh-keygen -t rsa 使用rsa算法加密

    Generating public/private rsa key pair.

    Enter file in which to save the key (/root/.ssh/id_rsa): #使用默认生成文件名

    Enter passphrase (empty for no passphrase): #私钥的对称密钥

    Enter same passphrase again:

    Your identification has been saved in /root/.ssh/id_rsa.

    Your public key has been saved in /root/.ssh/id_rsa.pub.

    The key fingerprint is:

    SHA256:xrg3GeMda+MI1InqgZwb/ok5x/h+Y5ZJ4A07MYwTjrs [email protected]

    The key's randomart image is:

    2.将公钥发送给服务器端

    [root@CentOS7 .ssh]# ssh-copy-id 192.168.231.192 #ssh-copy-id会自动复制本机的ssh公钥到对端主机

    3、验证结果

    [root@CentOS7 .ssh]# ssh 192.168.231.192

实现批量基于Key验证

实例:实现100台主机的基于key验证 //结合expect工具将公钥推送到到100台主机上

#!/bin/bash

    **rpm -q expect&> /dev/null||yum install expect -y**

    **ssh-keygen -P"" -f "/root/.ssh/id_rsa"**

    **password=centos**

    **whileread ipaddr;do #调用expcet脚本**

    **expect <<EOF**

    **set timeout 10**

    **spawn ssh-copy-id$ipaddr**

    **expect {**

"yes/no"{ send "yes\n";exp_continue }

"password"{ send "$password\n" }

    **}**

    **expect eof**

    **EOF**

    **done < ip.txt**

想要完成多主机基于Key验证,方法有二:

方法一:将所有主机包括本主机的公钥复制到一台主机上,然后再将这台主机上的 authorized_keys 文件复制到其他所有主机上,推荐。

方法二:所有主机使用同一对密钥,因为基于 Key 验证,破解一台主机后所有主机也可以免密登陆,所以破解难度与方法一相同。

SSH应用

scp命令用于基于ssh登陆进行安全的远程文件全量拷贝。

scp [email protected]:/root/.ssh/authorized_keys [email protected]:/root/.ssh/ #将远程74主机上的文件复制到远程主机69上

语法:scp [选项][用户@]网络地址:/远程文件 本地目录
scp [选项] 本地文件 [用户@]网络地址:/远程目录
scp [选项][用户@]网络地址:/远程文件 [用户@]网络地址:/远程目录

选项

-C: 压缩数据流
-r: 递归复制
-p: 保持原文件的属性信息
-q: 静默模式
-P PORT: 指明remote host的监听的端口

rsync命令用于基于ssh登陆进行安全的远程文件增量拷贝。

语法:rsync [选项] 本地文件 网络地址:远程文件

          rsync [选项] 网络地址:远程文件 本地文件
          rsync [选项] 本地文件/网络地址:远程文件

root@CentOS7 rsync]# tree #源主机上的文件
.
├── dir1
│ ├── 9x9table.sh #目标主机上有删除修改
│ ├── chessboard.sh #目标主机没有此文件
│ ├── copycmd.sh #目标主机有增加修改
│ ├── Ddos.sh
│ └── dir3 #目标主机没有这个目录
│ ├── guess.sh
│ └── Hanoi_Tower.sh
└── dir2
├── isosceles_triangle.sh
├── MageAwk.sh #目标主机没有此文件
├── matrix.sh
└── md5break.sh

3 directories, 10 files
[root@CentOS7 rsync]# ssh 192.168.30.75 "tree /data/rsync/" #目标主机上的文件
/data/rsync/
├── dir1
│ ├── 9x9table.sh
│ ├── copycmd.sh
│ └── Ddos.sh
└── dir2
├── isosceles_triangle.sh
├── matrix.sh
└── md5break.sh

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

使用安全的shell连接做为传输方式
• rsync –av /etc server1:/tmp 复制目录和目录下文件

rsync -av /etc/ 192.168.30.74:/data #会只复制etc下的文件,类似于cp -r

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

rsync -av /etc 192.168.30.74:/data #会连同etc目录一同复制,类似于cp --parents

比scp更快,只复制不同的文件

选项:
-n 模拟复制过程
-v 显示详细过程
-r 递归复制目录树
-p 保留权限
-t 保留时间戳
-g 保留组信息
-o 保留所有者信息
-l 将软链接文件本身进行复制(默认)
-L 将软链接文件指向的文件复制
-a 存档,相当于–rlptgoD,但不保留ACL(-A)和SELinux属性(-X)

--existing 只同步目标端已有的文件 --ignore-existing 只复制目标端不存在的文件

rsync -av --existing /data/rsync/ 192.168.30.75:/data/rsync

2.1 ssh服务

rsync -av --ignore-existing /data/rsync/ 192.168.30.75:/data/rsync

2.1 ssh服务

--backup 备份文件 --backup-dir= 备份至指定目录

2.1 ssh服务

--exclude 排除匹配的文件

2.1 ssh服务

--remove-source-files 删除已经同步的源文件

2.1 ssh服务

--delete 删除目标端的不同步文件(多删,少补)

2.1 ssh服务

猜你喜欢

转载自blog.51cto.com/13958408/2175514
2.1