第十九章 加密与安全(一)

144 阅读18分钟

@[TOC](第十九章 加密与安全(一))


实验一:Openssl 使用

目的

Openssl 使用基本用法。

前提

系统发行版本 		ip地址 			主机名
CentOS7 		172.20.1.101 	node1
CentOS7 		172.20.1.102 	node2
CentOS7 		172.20.1.103 	node3

安装openssl软件包:

yum -y install openssl

查询openssl包信息:

rpm -qi openssl

显⽰openssl的⼦命令,随便输⼊⼀个openssl不⽀持的命令,就会提⽰出openssl的命令列表:

标准命令,消息摘要命令,加密命令 openssl help

openssl命令使⽤:

【例1】openssl中对称加密的使⽤ 在node1中使⽤openssl的enc 命令对称加密⽂件file1,为file1.ciper

制作实验用的文件: echo "hello world" > file1 查看没加密前的文件内容: cat file1 加密文件:openssl enc -des3 -a -salt -in file1 -out file1.ciper 根据需要设置密码。 查看加密后的文件: cat file1.ciper

【例2】使⽤openssl⽣成信息摘要,对⽐md5sum 命令⽣成的内容,应该⼀样才对

使用md5进行生产摘要信息: openssl dgst -md5 file1 生成md5摘要信息: md5sum file1 对比验证结果。

【例3】使⽤openssl ⽣成密码 使⽤相同的密码每次秘钥都不⼀样,因为默认使⽤的salt不⼀样:

md5sum file1
openssl passwd -1
输入密码;

openssl passwd -1
输入不一样的密码;两次密码不一样,结果也不同。

说明:-1表⽰使⽤md5。

现在我们制定以下相同的salt,然后输⼊相同的密码,结果应该⼀样才对:

openssl passwd -1
显示结果: $1xzgK5UKT6$xYzS.oSeUYm4HM35DSiv0.

使用相同salt:openssl passwd -1 -salt zgK5UKT6 
输入相同的密码,其结果是一样的。

【例4】使⽤openssl⽣成伪随机内容,以base64格式显⽰

查看帮助: openssl rand help

每次显⽰内容是随机的:

openssl rand -base64 10
0Tbb+AlIrXtOeA==

openssl rand -base64 10
LKPYsGgsHnzLSA==

openssl rand -bae64 10
KYOoC0LMMhMcDA==

【例5】使⽤openssl ⽣成公私钥 ⽣成⼀个rsa的私钥:

(umask 066;openssl genrsa -out private.key 1024)

使⽤des加密过的rsa私钥:

(umask 066;openssl genrsa -out private.key -des 1024)

解密私钥:

openssl rsa -in private.key -out private2.key

使⽤对应的私钥⽣成公钥:

openssl rsa -in private2.key -pubout -out public.key

【例6】使⽤openssl ⽣成ca签署的证书 在node1服务器上的/etc/pki/CA⽬录⽣成rsa私钥:

yum -y install tree
cd /etc/pki/CA

查看目录结构:tree

cd private/
(umask 077; openssl genrsa -out cakey.pem 4096)

⽣成⾃签证书:

openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out cacert.pem -days 3650
输入:(国家代码)CN
输入:(所在州省)beijing
输入:(所在城市)beijing
输入:(公司名称)magedu
输入:(部门名称)M35
输入:(用户名或主机名)www.magedu.com
输入:(邮箱地址)可留空,直接回车
根据提示,输入相应信息即可。

查看⾃签证书详细内容:

openssl x509 -in cacert.pem -noout -text

查看⾃签证书简要内容,查看证书有效期:

#颁发者信息
openssl x509 -in cacert.pem -noout -issuer
#证书有效期
openssl x509 -in cacert.pem -noout -dates

【例7】客户端向CA申请证书 在node2服务器中⽣成私钥:

(umask 077; openssl genrsa -out app.key 1024)

在node2中利⽤私钥⽣成ca证书申请请求⽂件:

openssl req -new -key app.key -out app.csr
CN
beijing
beijing
magedu
M35
app.magedu.com
邮件地址为空,直接回车;
根据要求,输入相应信息即可。

将node2的ca请求⽂件发送到node1上:

scp app.csr 172.20.1.101:/root/

在node1的/etc/pki/CA/创建两⽂件:index.txt和serial:

touch /etc/pki/CA/index.txt
echo 0F >/etc/pki/CA/serial

给app.csr签署证书:

openssl ca -in /root/app.csr -out /etc/pki/CA/certs/app.crt -days 100
需要两次输入y。

在node2上使⽤相同的私钥再次⽣成⼀个证书: 在ndoe2中⽣成ca签署请求,并发给node1:

openssl req -new -key app.key -out app2.csr
(输入步骤略)
根据要求,输入相应信息即可。

scp app2.csr 172.20.1.101:/root/

在node1上签署app2的证书签署请求:

openssl ca -in /root/app2.csr -out /etc/pki/CA/certs/app2.crt -days 100
输入2次y。

【例8】证书吊销 在node1中查看签署过的证书,并将10证书吊销:

]# cat /etc/pki/CA/index.txt
显示:
V	220720012755Z		0F	unknown	/C=CN/ST=beijing/O=magedu/OU=M35/CN=app.magedu.com
V	220720013114Z		10	unknown	/C=CN/ST=beijing/O=magedu/OU=M35/CN=app2.magedu.com

#查看指定编号证书状态
]# openssl ca -status 10
10=Valid (V)
]# openssl ca -revoke /etc/pki/CA/newcerts/10.pem

#查看吊销情况
]# cat /etc/pki/CA/index.txt
V	220720012755Z		0F	unknown	/C=CN/ST=beijing/O=magedu/OU=M35/CN=app.magedu.com
R	220720013114Z	220411013552Z	10	unknown	/C=CN/ST=beijing/O=magedu/OU=M35/CN=app2.magedu.com

]# openssl ca -status 10
10=Revoked (R)

在node1中⽣成吊销通知证书:

echo 1F >/etc/pki/CA/crlnumber	#注意:第一次更新证书吊销列表前,才需要执行
openssl ca -gencrl -out /etc/pki/CA/crl.pem
cat /etc/pki/CA/crlnumber
openssl crl -in /etc/pki/CA/crl.pem -noout -text

实验二:PAM

目的

  • 认识PAM是插件式验证框架,了解各验证模块所在目录及配置文件。 pam 的主配置文件为:/etc/pam.conf, 也可以根据对应的具体应用单独设置配置文件,位置为/etc/pam.d/下。
  • 当/etc/pam.d 存在时, /etc/pam.conf 则失效。

安装pam

【例1】安装pam包并查看信息:
yum -y install pam
yum info pam.x86_64

【例2】各种验证模块的存放位置:

cd /usr/lib64/security/
ls

【例3】对应模块的配置⽂件存放位置:

cd /etc/security/
ls

实验三:加解密

目的

了解加密、解密的实现过程。

前提

实验环境介绍 系统发行版本 ip地址 主机名 CentOS7 172.20.1.101 node1 CentOS7 172.20.1.102 node2 CentOS7 172.20.1.103 node3

步骤

1、gpg加密软件

yum -y install gnupg2 
yum info gnupg2

gnupg2软件包的主要程序和配置⽂件:

rpm -ql gnupg2

【例1】使⽤pgp对某⽂件进⾏加密处理 在node1服务器上编辑⽂件file1.txt,并使⽤gpg加密

echo "hello world" > file1.txt
gpg -c file1.txt

回车后设定⼀个加密⼝令,并确认密码: 在这里插入图片描述 在这里插入图片描述

⽣成了加密⽂件:file1.txt.gpg 加密后⽂件不可查看到真实内容。

使⽤scp将file1.txt⽂件传输到node2主机:

scp file1.txt.gpg 172.20.1.102:/root/

在node2中解密拷贝过来的file1.txt.gpg:

gpg -o file1.txt -d file1.txt.gpg

输⼊密码: 在这里插入图片描述

~]$ cat file1.txt
hello world

【例2】使⽤gpg⽣成公钥 在node1,安装熵池补充服务rng-tools,⽅便实验操作,否则⽣成密码时会卡主:

yum -y install rng-tools
systemctl restart rngd

使⽤ --gen-key ⽣成公私钥:

  1. 选择加密算法RSA
  2. 选择RSA秘钥长度
  3. 选择秘密过期时间
  4. 填写名称
  5. 邮箱和备注可以跳过
  6. 最后选择0 确定

注意:下面建议在真实机上做、需要动鼠标或敲键盘、生成密钥

gpg --gen-key 
输入:选择选择key的类型,1为默认表示rsa,直接回车实验默认; 
输入:key长度,默认2048,直接回车;
输入:有效期限,默认0表示无期限,直接回车; 
输入:确定,y回车;
输入:用户名,maged回车; 
输入:邮件地址,留空直接回车;
输入:注释,留空直接回车; 
输入:确定或修改,o确定回车; 
根据需要,输入相应内容即可。

以下步骤,可⼀直回车完成:

输⼊密码: 在这里插入图片描述

确认输⼊的密码: 在这里插入图片描述

提⽰要求输⼊安全密码: 在这里插入图片描述

提⽰,输⼊密码不安全:

在这里插入图片描述

提⽰重新确认: 在这里插入图片描述

看⼀下⽣成的密码对,pubring是公钥,secring私钥,这两个⽂件不可以⽤cat直接查看,乱码:

.ngupg⽬录:

[root@node1 ~]# cd .gnupg
[root@node1 .gnupg]# ll
total 28
-rw------- 1 root root 7680 Apr 11 10:27 gpg.conf
drwx------ 2 root root    6 Apr 11 10:27 private-keys-v1.d
-rw------- 1 root root 1166 Apr 11 10:30 pubring.gpg
-rw------- 1 root root 1166 Apr 11 10:30 pubring.gpg~
-rw------- 1 root root  600 Apr 11 10:30 random_seed
-rw------- 1 root root 2468 Apr 11 10:30 secring.gpg
srwxr-xr-x 1 root root    0 Apr 11 10:30 S.gpg-agent
-rw------- 1 root root 1280 Apr 11 10:30 trustdb.gpg

导出公钥到magedu.pubkey

gpg -a --export -o magedu.pubkey

【例3】在node2上使⽤node1的公钥加密数据,然后让node1使⽤私钥解密

拷贝node1的公钥到node2上

scp magedu.pubkey 172.20.1.102:/root/

在node2上使⽤gpg⽣成node2⾃⼰的公私钥对:

#工作中、此步谨慎操作‘rm -rf .gnupg’
rm -rf .gnupg
yum -y install rng-tools
systemctl restart rngd
gpg --gen-key
输入:选择选择key的类型,1为默认表示rsa,直接回车实验默认; 
输入:key长度,默认2048,直接回车;
输入:有效期限,默认0表示无期限,直接回车; 
输入:确定,y回车;
输入:用户名,laowang回车; 
输入:邮件地址,留空直接回车;
输入:注释,留空直接回车; 
输入:确定或修改,o确定回车; 
根据需要,输入相应内容即可。

查看node2的公钥有哪些,然后将node1的公钥导⼊:

gpg --import magedu.pubkey

使⽤magedu公钥加密file2⽂件,并将加密后的⽂件拷贝到node1中:

echo "ilinux.io" > file2
gpg -e -r maged file2
根据需要,输入相应的内容即可。

scp file2.gpg 172.20.1.101:/root

在node1中解密file2.gpg ⽂件:

.gnupg]# cd
~]# gpg -o file2 -d file2.gpg
~]# cat file2
ilinux.io

【例4】公私钥管理 使⽤命令删除公钥:

gpg --list-keys
#显示:
/root/.gnupg/pubring.gpg
------------------------
pub   2048R/D46705FD 2022-04-12
uid                  maged
sub   2048R/3AB0F1C3 2022-04-12
pub   2048R/0CC882F0 2019-01-24
uid                  node2
sub   2048R/CB69EB45 2019-01-24

#删除maged公钥
gpg --delete-keys maged
gpg --list-keys

删除私钥,通过命令只能删除内容不能删除⽂件,最直接的的⽅式直接删除.gnupg目录

gpg --delete-keys maged
输入:确认删除,y

gpg --list-keys
gpg --delete-secret-keys node2
输入:确认删除,y
输入:再次确认删除,y。

或:

rm -rf .gnugp

实验四:sshd服务

目的

理解sshd服务的功能和配置。

前提

centos7系统。

实验步骤

1、ssh服务器端

【例1】查询openssh-server

rpm -qa openssh-server

要想通过ssh链接远程服务器,对方服务器需要安装ssh服务器端程序,并开启对应服务。 CentOS中默认使用的是openssh-server,进程名称为sshd,默认监听的网络端口是22。

【例2】sshd服务有对应的配置⽂件,位置是/etc/ssh/sshd_config

rpm -ql openssh-server

2、修改sshd默认端⼝号

【例3】改sshd服务默认端⼝,为9527然后重启查看状态 修改配置⽂件中的Port 配置参数

vim /etc/ssh/sshd_config
修改为:
Port 9527

systemctl restart sshd		#重启sshd服务

#再把端口号改回
vim /etc/ssh/sshd_config
修改为:
#Port 22

systemctl restart sshd		#重启sshd服务

【例4】修改监听的ip地址,默认监听本机的所有ip地址,通过修改配置⽂件指定ssh监听在指定的ip地址

给node1主机在添加⼀个ip地址172.20.1.111

ip a a 172.20.1.111/16 dev ens33
ip a

修改ssh的配置⽂件,指定监听的ip地址为172.20.1.111

vim /etc/ssh/sshd_config
修改为:
ListenAddress 172.20.1.111

systemctl restart sshd
ss -tnl

然后使⽤node2或者xshell链接172.20.1.101 链接失败,链接172.16.1.111成功。

7 ~]# ssh 172.20.1.101
ssh: connect to host 172.20.1.101 port 22: Connection refused
7 ~]# ssh 172.16.1.111
root@172.16.1.111's password:
Last login: Tue Apr 12 14:22:14 2022 from 172.16.1.111
6 ~]$

【例5】修改ssh服务监听的⽹络地址类型,默认设any,inet 为ipv4,inet6为ipv6

vim /etc/ssh/sshd_config
修改为:
AddressFamily inet

systemctl restart sshd
ss -tnl

【例6】sshd服务默认需要记录⽇志,默认的⽇志级别为INFO,⽇志存放于/var/log/secure中

vim /etc/ssh/sshd_config
修改为:
SyslogFacility AUTHPRIV
LogLevel INFO

ll /var/log/secure

【例7】关于验证⽅⾯的配置

  • LoginGraceTime 指的是登录输入密码的最长时间,2m内容不输入密码,则结束本次链接,0代表不做限制。
  • PermitRootLogin 指的是是否允许root远程登录。yes代表允许, no代表不允许。
  • StrictModes 指的是在接受登录之前 是否检查文件权限和所有者信息和家目录信息,默认要检查。
  • MaxAuthTries 每次登录输入密码错误次数,默认是6次。
vim /etc/ssh/sshd_config
修改为:
LoginGraceTime 2m
PermitRootLogin yes
StrictModes yes
MaxAuthTries 6
MaxSessions 10

【例8】登录验证⽅式

PubkeyAuthentication 是否支持公钥验证方式 PasswordAuthentication 是否支持密码验证方法

vim /etc/ssh/sshd_config
修改为:
PubkeyAuthentication yes
PasswordAuthentication yes

【例9】是否⽀持x11选项,⾮活动时间限制选项

  • X11Forwarding 指定是否支持X11转发;
  • ClientAliveInterval 非活动时间限制,0为不限制;
  • ClientAliveCountMax 指定满足非活动时间次数,因此ClientAlivedInterval乘以ClientAlivedCountMax 的值为最长终非活动时间;
  • UseDNS 是否需要域名反解析,建议设置为no 这样可以提高链接速度。
vim /etc/ssh/sshd_config
修改为:
X11Forwarding yes
ClientAliveInterval 0
ClientAliveCountMax 3

【例10】设置ssh登录成功后的提⽰信息 设置banner,后⾯跟上提⽰的⽂本信息

vim /etc/ssh/sshd_config
修改为:
Banner /root/sshbanner.txt

重启sshd,重新链接,提⽰信息出现:

cat sshbanner.txt
Hello

systemctl restart sshd
exit
#用Xshell再次连接、提示信息出现
Type `help' to learn how to use Xshell prompt.
[c:\~]$ ssh 172.20.1.101


Connecting to 172.20.1.101:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Hello	#提示信息
Last login: Tue Apr 12 14:41:20 2022 from 172.20.1.7
[root@centos6 ~]$ 

【例11】设置访问控制⽤户

  • AllowUsers 允许登录的用户;
  • DenyUsers 不允许登录的用户;
  • AllowGroups 允许登录的组;
  • DenyGroups 不允许登录的组。

在node1上创建3个⽤户,并配置对应的密码:

#此次密码统一设置为和用户名一致
useradd gordon
passwd gordon

useradd tom
passwd tom

useradd alice
passwd alice

sshd配置⽂件中添加相关的访问控制选项:

vim /etc/ssh/sshd_config
修改为:
AllowUsers gordon tom
DenyUsers tom
AllowGroups alice gordon
DenyGroups alice

/etc/init.d/sshd restart

实际登录测试时,只有gordon可以登录成功,tom和alice再输⼊密码后被拒绝,要求再次输⼊密码;因此,有拒绝的⽤户 和组,肯定会被拒绝。

[root@centos7 ~]# ssh gordon@172.20.1.101
Hello
#密码输入上面创建用户时密码、密码即可登陆
gordon@172.20.1.101's password: 	
#登陆成功、
[gordon@centos6 ~]$ 

3、dropbear 编译安装并运⾏

【例12】到dropbear官⽹下载源码包

在这里插入图片描述

点击download: 在这里插入图片描述

使⽤wget下载源码包:

[root@centos7 ~]# yum -y install wget 
[root@centos7 ~]# wget https://matt.ucc.asn.au/dropbear/dropbear-2018.76.tar.bz2 

【例13】解压源码包,执⾏配置,编译,安装 编译安装前先安装开发环境:

[root@centos7 ~]# yum -y group install "Development Tools"

安装解压⼯具:

[root@centos7 ~]# yum -y install lbzip2 zlib-devel

解压对应的dropbear软件包:

[root@centos7 ~]# tar xvf dropbear-2018.76.tar.bz2

解压后进⼊⽬录:

[root@centos7 ~]# cd dropbear-2018.76

执行配置
[root@centos7 dropbear-2018.76]# ./configure

执行编译
[root@centos7 dropbear-2018.76]# make

执行安装
[root@centos7 dropbear-2018.76]# make instal

安装结束后使⽤dropbearkey 命令⽣成对应的公私钥:

[root@centos7 dropbear-2018.76]# mkdir /etc/dropbear
[root@centos7 dropbear-2018.76]# dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key

使⽤ dropbear -p 9527 启动dropbear服务:

[root@centos7 dropbear-2018.76]# dropbear -p 9527
#查看9527端口
[root@centos7 dropbear-2018.76]# ss -tnl

node2使⽤Xshell链接软件node1服务器成功:

[root@centos6 ~]$ ssh 172.20.1.101 -p 9527

4、AIDE 环境检查⼊侵检测⼯具

【例14】安装aide 并查看软件信息

[root@centos7 ~]# yum -y install aide
[root@centos7 ~]# rpm -qi aide
Name        : aide
Version     : 0.15.1
Release     : 13.el7
Architecture: x86_64
Install Date: Wed 13 Apr 2022 09:00:54 AM CST
Group       : Applications/System
Size        : 318333
License     : GPLv2+
Signature   : RSA/SHA256, Thu 10 Aug 2017 10:56:17 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : aide-0.15.1-13.el7.src.rpm
Build Date  : Thu 03 Aug 2017 01:00:53 PM CST
Build Host  : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://sourceforge.net/projects/aide
Summary     : Intrusion detection environment
Description :
AIDE (Advanced Intrusion Detection Environment) is a file integrity
checker and intrusion detection program.

Aide通过扫描对应文件的相关信息,存放到数据库中,后期和在数据库信息进行对比,判断文件是否有变动。 aide的配置文件为/etc/aide.conf, 里面定义了检测的相关信息和对应目录的指定配置规则。 使用 >- aide --init生成信息数据库
>- aide --update 更新数据库
>- aide --check 进行检测比对

在node1服务器上创建/data⽬录,在data中创建dir1⽂件夹和f1⽂件:

[root@centos7 ~]# mkdir -pv /data
[root@centos7 ~]# mkdir -pv /data/dir1
[root@centos7 ~]# echo hello > /data/f1
[root@centos7 ~]# cd /data

然后在aide的配置⽂件最下⾯添加下⾯的配置信息,让其检测/data/⽬录下的内容,不检查dir1下的内容:

[root@centos7 data]#vim /etc/aide.conf
添加:
/data/ CONTENT
!/data/dir1

然后执⾏aide数据初始化:

[root@centos7 data]# aide --init

AIDE, version 0.15.1

### AIDE database at /var/lib/aide/aide.db.new.gz initialized.

然后对f1⽂件进⾏修改, 执⾏检测,发现f1⽂件被篡改:

[root@centos7 data]# cd /var/lib/aide/
[root@centos7 aide]# ll
total 5856
-rw------- 1 root root 5994032 Apr 13 09:05 aide.db.new.gz
[root@centos7 aide]# mv aide.db.new.gz aide.db.gz
[root@centos7 aide]# echo "hello world" > /data/f1
[root@centos7 aide]# aide --check
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2022-04-13 09:07:40

Summary:
  Total number of files:	157220
  Added files:			0
  Removed files:		0
  Changed files:		1


---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /data/f1

---------------------------------------------------
Detailed information about changes:
---------------------------------------------------


File: /data/f1
 SHA256   : WJG1tSLV3whtD/CxEPvZ0hu0/HFjrzTQ , qUiQTy8PR5uPgZdpSzAYSw0u0cHNKh7A

在dir1中创建⽂件, 更新aide数据信息:

[root@centos7 aide]# echo fff > /data/dir1/ss
[root@centos7 aide]# aide --update
AIDE 0.15.1 found differences between database and filesystem!!
Start timestamp: 2022-04-13 09:16:09

Summary:
  Total number of files:	157220
  Added files:			0
  Removed files:		0
  Changed files:		1


---------------------------------------------------
Changed files:
---------------------------------------------------

changed: /data/f1

---------------------------------------------------
Detailed information about changes:
---------------------------------------------------


File: /data/f1
 SHA256   : WJG1tSLV3whtD/CxEPvZ0hu0/HFjrzTQ , qUiQTy8PR5uPgZdpSzAYSw0u0cHNKh7A

修改对应的数据⽂件:

[root@centos7 aide]# rm -rf aide.db.gz
[root@centos7 aide]# mv aide.db.new.gz aide.db.gz

然后修改dir1中的ss⽂件内容,进⾏检测,结果没有发现ss⽂件被修改过,因为在配置⽂件中定义了!/data/dir1:

[root@centos7 aide]# echo sss > /data/dir1/ss 
[root@centos7 aide]# aide --check

AIDE, version 0.15.1

### All files match AIDE database. Looks okay!


实验五:ssh端⼝转发

⽬的

理解ssh本地端口转发原理: node1 上开启了ssh本地转发,对应的监听地址和端口是127.0.0.1 9527 node1 通过ssh链接到node2 node2 又通过ssh链接到了node3
node1 上使用非加密的telnet客户端 经过ssh本地的转发后到达node3,实现加密通信。

前提

准备三台虚拟机 系统版本 ,ip地址,主机名 CentOS6 192.168.1.142 node1 CentOS7 192.168.1.143 node2 CentOS7 192.168.1.128 node3

实验步骤

1、本地端⼝转发 【例1】在node1上安装telnet客户端,关闭selinux,情况防⽕墙
[root@node1 ~]$ yum -y install telnet
[root@node1 ~]$ setenforce 0
[root@node1 ~]$ iptables -F

【例2】在node3关闭selinux,关闭firewalld并清空规则,安装telnet-server服务并启动

@node3 ~]# systemctl stop firewalld
@node3 ~]# systemctl disable firewalld
@node3 ~]# iptables -F
@node3 ~]# setenforce 0
@node3 ~]# yum -y install telnet telnet-server
@node3 ~]# systemctl start telnet.socket
#查看telnet端口23
@node3 ~]# ss -tnl
State      Recv-Q Send-Q   Local Address:Port                  Peer Address:Port              
LISTEN     0      128                  *:111                              *:*                  
LISTEN     0      128                  *:6000                             *:*                  
LISTEN     0      5        192.168.122.1:53                               *:*                  
LISTEN     0      128                  *:22                               *:*                  
LISTEN     0      128          127.0.0.1:631                              *:*                  
LISTEN     0      100          127.0.0.1:25                               *:*                  
LISTEN     0      128                 :::111                             :::*                  
LISTEN     0      128                 :::6000                            :::*                  
LISTEN     0      128                 :::22                              :::*                  
LISTEN     0      128                 :::23                              :::*                  
LISTEN     0      128                ::1:631                             :::*                  
LISTEN     0      100                ::1:25                              :::*  

观察23端⼝监听即可。 【例3】在node3上创建alice⽤户

@node3 ~]# useradd alice
@node3 ~]# passwd alice
输入密码2次后即可。

【例4】在node1上使⽤ping 命令ping node3,使⽤telnet 登录node3的alice⽤户

[root@node1 ~]$ ping 192.168.1.128 -c 2
PING 192.168.1.128 (192.168.1.128) 56(84) bytes of data.
64 bytes from 192.168.1.128: icmp_seq=1 ttl=64 time=0.988 ms
64 bytes from 192.168.1.128: icmp_seq=2 ttl=64 time=0.642 ms

--- 192.168.1.128 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1017ms
rtt min/avg/max/mdev = 0.642/0.815/0.988/0.173 ms

[root@node1 ~]$ telnet 192.168.1.128
Trying 192.168.1.128...
Connected to 192.168.1.128.
Escape character is '^]'.

Kernel 3.10.0-957.el7.x86_64 on an x86_64
#输入用户名:alice
node3 login: alice
#输入密码:
Password: 
Last login: Wed Apr 13 10:00:50 from ::ffff:192.168.1.128
#验证登录用户
[alice@node3 ~]$ id
uid=1001(alice) gid=1001(alice) groups=1001(alice)

【例5】在node3上配置防⽕墙规则,禁⽌node1链接node3的telnet服务

[root@node3 ~]# iptables -A INPUT -s 192.168.1.142 -j REJECT
[root@node3 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 76 packets, 5660 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       192.168.1.142         0.0.0.0/0            reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 59 packets, 8320 bytes)
 pkts bytes target     prot opt in     out     source               destination      

【例6】在node1上测试⼀下是否可以ping和telnet链接node3

[root@node1 ~]$ ping 192.168.1.128
PING 192.168.1.128 (192.168.1.128) 56(84) bytes of data.
From 192.168.1.128 icmp_seq=1 Destination Port Unreachable
From 192.168.1.128 icmp_seq=2 Destination Port Unreachable

--- 192.168.1.128 ping statistics ---
2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1015ms

[root@node1 ~]$ telnet 192.168.1.128
结果是拒绝连接,Connection refused。

【例7】在node2 上ping node3并测试ssh 链接node3的alice⽤户

[root@node2 ~]# ping 192.168.1.128
PING 192.168.1.128 (192.168.1.128) 56(84) bytes of data.
64 bytes from 192.168.1.128: icmp_seq=1 ttl=64 time=0.839 ms
64 bytes from 192.168.1.128: icmp_seq=2 ttl=64 time=0.694 ms
^C
--- 192.168.1.128 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1019ms
rtt min/avg/max/mdev = 0.694/0.766/0.839/0.077 ms

[root@node2 ~]# ssh alice@192.168.1.128
输入密码,即可登录。
exit

【例8】在node1上进⾏ssh 本地转发

[root@node1 ~]$ ssh -L 9527:192.168.1.128:23 192.168.1.143
输入:yes
输入密码:
即可登录。
ss -nt
State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
ESTAB       0      0              192.168.1.143:22                         192.168.1.1:50848              
ESTAB       0      0              192.168.1.143:22                         192.168.1.143:52530    

【例9】再开⼀个node1终端,使⽤telnet 链接node3的alice⽤户

[root@node1 ~]$ telnet 127.0.0.1 9527
输入:alice
输入密码:

uname
验证。

【例10】ssh还有其他选项,-N实现前台程序,Ctrl + C 结束进程

ssh -L 9527:192.168.1.128:23 -N 192.168.1.143

-Nf 实现后台执⾏程序,可以通过kill结束相应进程

ps aux | grep 9527
查到pid为3470

kill -9 3470
ps aux | grep 9527

2、SSH 远程转发 实现原理:node2通过ssh服务连接node1 ,node1 通过127.0.0.1 9527 将信息通过已经建⽴的ssh发给node2, node2拿到信息后直接发给node3的telnet服务,实现ssh远端转发连接。 【例1】在node2上创建ssh远程转发,-Nf实现进程后台运⾏

[root@node2 ~]# ssh -R 9527:192.168.1.128:23 -Nf 192.168.1.142
输入密码:

[root@node2 ~]# ps aux | grep Nf
root       9017  0.0  0.0 182916  1192 ?        Ss   14:09   0:00 ssh -R 9527:192.168.37.128:23 -Nf 192.168.37.142
root       9031  0.0  0.0 112708   976 pts/1    S+   14:10   0:00 grep --color=auto Nf

[root@node2 ~]# ss -nt
State       Recv-Q Send-Q                                     Local Address:Port                                                    Peer Address:Port              
ESTAB       0      0                                         192.168.37.143:33084                                                 192.168.37.142:22                 
ESTAB       0      52                                        192.168.37.143:22                                                      192.168.37.1:52550              

【例2】在node1上查看监听端⼝号 9527,使⽤telnet远程连接node3

[root@node1 ~]$ ss -tnl | grep 9527
[root@node1 ~]$ telnet 127.0.0.1 9527
输入:alice
输入密码:
即可,连接完成。

【例3】关闭node2上的ssh远程转发进程,node1 telnet node3 失败

[root@node2 ~]# ps aux | grep 9527
查到pid为1270;

[root@node2 ~]# kill -9 1270
[root@node2 ~]# ss -nt

在node1 telnet node3 失败

[root@node1 ~]$ telnet 127.0.0.1 9527
拒绝连接。

3、SSH动态端⼝转发 【例1】在node3上安装httpd服务,开启httpd服务,编写测试主页index.html

[root@node3 ~]# yum -y install httpd > /dev/null
[root@node3 ~]# echo "<h1>www.google.com</h1>" >/var/www/html/index.html
[root@node3 ~]# systemctl start httpd
[root@node3 ~]# ss -tnl
监听80端口。

[root@node3 ~]# curl 127.0.0.1
<h1>www.google.com</h1>

【例2】测试⼀下node1是否可以访问node3的httpd服务

[root@node1 ~]$ curl 192.168.1.128
显示不能连接到主机,couldn't connect to host

【例3】 在node1上开启ssh的动态端⼝转发,实验curl 访问node3的httpd服务,然后关闭动态端⼝转发功能

[root@node1 ~]$ ssh -D 1000 root@192.168.1.143 -Nf
输入密码;
[root@node1 ~]$ curl --socks5 127.0.0.1:1000 192.168.1.128
可以访问。

ps aux | grep Nf
查看pid为3834
kill 3834

实验六:sudo命令

在这里插入图片描述

⽬的

掌握sudo权限的设置,使用visudo 命令配置默认配置/etc/sudoers文件。

基本授权操作:

wang 	172.20.121.11=(root) 	/usr/bin/cat 	/etc/shadow
被授权用户 登录主机地址=(授权成的用户) 授权的具体命令
被授权用户 user: 命令的发起用户
登录主机 host: 被授权用户所在的主机地址,可以写成ALL
授权成的用户 (runas): 想用哪个用户身份去运行命令
授权命令 command: 想被授权的命令 ,可以写成ALL 即所有命令

  -a type       使用指定的 BSD 认证类型
  -b            在后台运行命令
  -C fd         关闭所有 >= fd 的文件描述符
  -E            在执行命令时保留用户环境
  -e            编辑文件而非执行命令
  -g group      以指定的用户组执行命令
  -H            将 HOME 变量设为目标用户的主目录。
  -h            显示帮助消息并退出
  -i [command]  以目标用户身份运行一个登录 shell
  -K            完全移除时间戳文件
  -k            无效的时间戳文件
  -l[l] command 列出用户能执行的命令
  -n            非交互模式,将不提示用户
  -P            保留组向量,而非设置为目标的组向量
  -p prompt     使用指定的密码提示
  -S            从标准输入读取密码
  -s [command]  以目标用户身份运行 shell
  -U user       在列表时,列出指定用户的权限
  -u user       以指定用户身份运行命令(或编辑文件)
  -V            显示版本信息并退出
  -v            更新用户的时间戳而不执行命令
  --            停止处理命令行参数

前提

  • centos7系统;在CentOS7上是 sudo.x86_64,使用yum install sudo命令即可安装。
  • sudo 的配置文件为/etc/sudoers, /etc/sudoers.d、/etc/sudoers 为总配置文件,也可以在/etc/sudoers.d/文件夹下单独创建配置文件,实现配置分别管理。
  • 可通过/usr/sbin/visudo 对配置文件进行编辑。
  • sudo程序的可执行文件为/usr/bin/sudo 有特殊权限位。

实验步骤

  1. 授权wang⽤户完成 /usr/bin/cat /etc/shadow 【例1】编辑/etc/sudoers ⽂件
#可以用whereis查看命令路径、'如cat: /usr/bin/cat'
[root@node1 ~]# whereis cat
cat: /usr/bin/cat /usr/share/man/man1/cat.1.gz /usr/share/man/man1p/cat.1p.gz
root ALL(ALL) ALL
wang 192.168.1.128=(root) /usr/bin/cat /etc/shadow

使用wang用户直接cat /etc/shadow 提示权限不够;
使用sudo cat /etc/shadow 提示输入wang用户密码,然后执行授权操作:

cat /etc/shadow 不能访问;
sudo cat /etc/shadow 输入密码后可访问;
  1. 授权某个⽤户组的⽤户具有特定权限 【例1】visudo 编辑 配置⽂件/etc/sudoers 配置如下
%wheel ALL=(ALL) ALL
%tom ALL=(ALL) ALL

tom组的⽤户具有所有⽤户的所有命令的权限:

su -l tom
sudo cat /etc/shadow
输入密码即可;

【例3】在/etc/sudoers.d ⽬录下创建授权配置⽂件 tom,并授权成root权限,可执⾏所有命令

cd /etc/sudoers.d/
vim tom
tom ALL=(root) ALL

su -l tom
cat /etc/shadow
拒绝;

sudo cat /etc/shadow
输入密码即可;

对于/etc/sudoers.d 下的授权管理配置⽂件也可以⽤visudo编辑,使⽤-f选项即可:

visudo -f /etc/sudoers.d/tom

visudo 可以加上-c选项进⾏内容格式检查:

visudo -c -f /etc/sudoers.d/tom
  1. 授权时间限制,默认18000分钟内不⽤再次输⼊密码 【例1】使⽤sudo -V 可以查看⼀下sudo的详细信息
sudo -V
...
-------------------------------------------------------------------------------------------
Authentication timestamp timeout: 18000.0 minutes
		#默认18000分钟内不⽤再次输⼊密码
Password prompt timeout: 18000.0 minutes
Number of tries to enter a password: 3
Umask to use or 0777 to use user's: 022
Path to mail program: /usr/sbin/sendmail
Flags for mail program: -t
Address to send mail to: root
Subject line for mail messages: *** SECURITY information for %h ***
Incorrect password message: Sorry, try again.
Path to lecture status dir: /var/db/sudo/lectured
Path to authentication timestamp dir: /var/run/sudo/ts		#时间戳路径
-------------------------------------------------------------------------------------------
...

查看⼀下对应⽤户的时间戳⽂件,⽂件内容不可直接查看。

[root@node1 ~]# cd /var/sun/sudo/ts
[root@node1 ts]# ll
total 8
drwx------ 2 root tom  4096 Apr 13 17:26 tom
drwx------ 2 root wang 4096 Apr 13 16:45 wang
[root@node1 ts]# cat tom
88焙ďB3Qou[root@node1 ts]# cat wang
[root@node1 ts]#
  1. sudoers配置⽂件中的其他配置⽅式

user host=(runas) command
其中user除了使⽤⽤户名外,还可以使⽤#uid代替user还可以使⽤⽤户组名,为了和⽤户名作区分,需要使⽤%groupname,同样使⽤%#gid代替也可以。

【例1】使⽤wang⽤户的uid进⾏授权操作,使⽤tom组id进⾏授权操作 编辑授权配置⽂件:

[root@centos7 ~]# cat /etc/passwd |grep tom
tom:x:1000:1000::/home/tom:/bin/bash
[root@centos7 ~]# cat /etc/passwd |grep wang
wang:x:1003:1003:wang:/home/wang:/bin/bash
[root@centos7 ~]# visudo -f /etc/sudoers.d/test
[root@centos7 ~]# cat /etc/sudoers.d/test
#1003	ALL=(ALL) ALL
%#1000	ALL=(ALL) ALL

进⾏授权验证:

[root@node1 ~]# su -l tom
[tom@node1 ~]$cat /etc/shadow | grep root
cat: /etc/shadow: Permission denied	#权限拒绝
[tom@node1 ~]$sudo /etc/shadow | grep root
#输入用户密码、即可查看
[tom@node1 ~]$exit

[root@node1 ~]# su -l wang
[wang@node1 ~]$ cat /etc/shadow | grep root
cat: /etc/shadow: Permission denied	#权限拒绝
[wang@node1 ~]$ sudo /etc/shadow | grep root
#输入用户密码、即可查看
[wang@node1 ~]$ exit
  1. 使⽤sudo时取消输⼊密码过程,在command前加上NOPASSWD 【例1】
[root@node1 ~]# visudo -f /etc/sudoers.d/test
[root@node1 ~]# cat /etc/sudoers.d/test
tom ALL=(ALL) NOPASSWD:ALL
[root@node1 ~]# su -l tom
[tom@node1 ~]$ cat /etc/shadow | grep root
#权限拒绝
[tom@node1 ~]$ sudo cat /etc/shadow | grep root
#取消输⼊密码过程
[tom@node1 ~]$ exit
  1. 配置⽂件中定义别名

user hosts=(runas) command 配置⽂件中的4个部分都可以使⽤别名替换,别名只能使⽤⼤写字⺟和数字构成,以字⺟开头。

【例1】每种⽂件都有特定的定义⽅法

[root@node1 ~]# cat /etc/sudoers.d/test
User_Alias SYSUSER=tom
Host_Alias SYSHOST=192.168.1.128
Runas_Alias SYSRUNAS=root
Cmnd_Alias SYSCMD=/usr/bin/cat /etc/shadow
SYSUSER SYSHOST=(SYSRUNAS) SYSCMD

[root@node1 ~]# su -l tom
[tom@node1 ~]$ cat /etc/shadow
#权限拒绝
[tom@node1 ~]$ sudo cat /etc/shadow | grep root
#可以查看

【例2】授权时禁⽌直⾏特定的命令,需要再命令前加上!

[root@node1 ~]# visudo -f /etc/sudoers.d/test
[root@node1 ~]# cat /etc/sudoers.d/test
tom ALL=(root) /usr/bin/cat /etc/sudoers.d/test
[root@node1 ~]# su -l tom
[tom@node1 ~]$ cat /etc/shadow
权限拒绝;
[tom@node1 ~]$ cat /etc/gshadow
权限拒绝;
[tom@node1 ~]$ sudo cat /etc/shadow | grep tom
#可以访问
[tom@node1 ~]$ sudo cat /etc/gshadow | grep tom
#可以访问
[tom@node1 ~]$ exit 
  1. 默认⽤户,使⽤sudo是可以使⽤-u 选项制定runas⽤户,不加-u是使⽤默认⽤户 【例1】设置tom为默认⽤户
[root@node1 ~]# cat /etc/sudoers.d/test
Defaults:wang runas_default=tom
wang ALL=(tom,root) ALL

[wang@node1 ~]$ su -l wang
[wang@node1 ~]$ cat /etc/shadow | grep root
#权限拒绝
[wang@node1 ~]$ sudo cat /etc/shadow | grep root
#权限拒绝
[wang@node1 ~]$ sudo -u root cat /etc/shadow | grep root
#可以访问
[wang@node1 ~]$ exit

将tom换成root:

[root@node1 ~]# visudo -f /etc/sudoers.d/test
[root@node1 ~]# cat /etc/sudoers.d/test
Defaults:wang runas_default=root
wang ALL=(tom,root) ALL

[root@node1 ~]# su -l wang
[wang@node1 ~]$ cat /etc/shadow | grep root
#权限拒绝;
[wang@node1 ~]$ sudo -u tom cat /etc/shadow | grep root
#权限拒绝;
[wang@node1 ~]$ sudo cat /etc/shadow | grep root
#可以访问
[wang@node1 ~]$ exit
  1. 在配置⽂件中使⽤通配符,使⽤时需要注意,有可能有漏洞 【例11】在命令后⾯加上*号,会出现如下漏洞,未授权查看/etc/shadow,但是却可以查看shadow⽂件
cat /etc/sudoers.d/test
tom ALL=(root) /bin/head -1 /var/log/message*

su -l tom
head -1 /var/log/messages
权限拒绝;
sudo head -1 /var/log/messages
sudo head -1 /var/log/messages /etc/shadow
  1. 使⽤sudo -l 或者 -ll 查看当前⽤户具有的sudo可执⾏情况
[root@node1 ~]# visudo -f /etc/sudoers.d/test
[root@node1 ~]# cat /etc/sudoers.d/test
tom ALL=(root) /bin/head -1 /var/log/messages

[root@node1 ~]# su -l tom
[tom@node1 ~]$ sudo head -1 /var/log/messages
#可以访问

[tom@node1 ~]$ sudo -l
[tom@node1 ~]$ sudo -ll

[tom@node1 ~]$ exit
  1. 不执⾏任何命令,将⽤户的免密码时间更新⼀下:sodu -v
[root@node1 ~]# sudo -V | grep authentication
Path to authentication timestamp dir: /var/run/sudo/ts	#时间戳路径
Type of authentication timestamp record: tty

[root@node1 ~]# cd /var/run/sudo/ts/
[tom@node1 ~]$ date
[tom@node1 ~]$ su -l tom
[tom@node1 ~]$ sudo -v
[tom@node1 ~]$ exit
[root@node1 ~]# date
  1. sudo -k

sudo -k 可以重置密码时间为1970年01⽉01⽇, 由于当前时间肯定⼤于这个时间,因此下次执⾏sudo时,需要输⼊密码。

sudo -K 可以删除时间戳⽂件,因此下次执⾏sudo时需要输⼊密码。

ll
su -l tom
sudo -K
exit
su -l tom
sudo head -1 /var/log/messages
exit
ll
  1. sudo -i -u user有切换⽤户功能,root由此功能, 授权tom⽤户切换到root⽤户
sudo -i -u tom
sudo -i -u root
输入密码;
exit

visodu -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
tom	ALL=(root)	ALL

su -l tom
sudo -i -u root
输入密码;
exit
exit
  1. 给⽤户授权编辑sudoers⽂件的权限 使⽤sudoedit 即可
visodu -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
tom ALL=(root) /usr/bin/cat /etc/shadow

su -l tom
sudoedit /etc/sudoers
权限拒绝;
exit
visudo -f /etc/sudoers.d/test
cat /etc/sudoers.d/test
tom ALL=(root) /usr/bin/cat /etc/shadow, sudoedit
su -l tom
sudoedit /etc/sudoers
exit

实验七:tcp wrapper

目的

tcpwrapper实现应用程序的访问控制,如果某个软件使用了libwrap库,则可以通过tcpwrapper对其设置访问控制规则。我们可以使用ldd命令查看某个程序是否依赖libwarp库。

前提

系统发行版本 ip地址 主机名
CentOS7 172.20.1.101 node1
CentOS7 172.20.1.102 node2

实验步骤

  1. 使⽤ldd验证⼀下 sshd服务是否依赖libwrap库 【例1】可以查看到libwrap库,所有证明sshd服务收tcpwrapper控制
[root@node1 ~]# ldd /usr/sbin/sshd | grep libwrap

tcpwrapper通过/etc/hosts.allow 和 /etc/hosts.deny 的配置实现访问控制功能。

【例2】 通过配置hosts.deny实现拒绝node1主机访问node2主机

先通过node1使⽤ssh链接node2:

[root@node1 ~]# ssh 172.20.1.102
输入密码;
[root@node2 ~]# exit

然后再hosts.deny中添加配置规则拒绝node1的访问:

[root@node2 ~]# vim /etc/hosts.deny
#添加后、会拒绝node1的访问
sshd:172.20.1.101

接着使⽤ssh 从node1访问node2,链接被拒绝:

[root@node1 ~]# ssh 172.20.1.102
ssh_exchange_identification: read: Connection reset by peer
  1. 通过配置/etc/hosts.deny 实现指定服务的指定⽹络地址的访问控制 【例3】⾸先给node2主机在添加⼀个ipv4地址:
[root@node2 ~]# ip a a 172.20.1.112 dev ens33
[root@node2 ~]# ip a

【例4】配置/etc/hosts.deny⽂件,指定172.16.1.112的地址实现访问控制

[root@node2 ~]# vim /etc/hosts.deny
#添加
sshd@172.20.1.112:172.20.1.101

【例5】使⽤node1 ssh链接node2测试⼀下, 验证成功,访问112地址被拒绝,102地址访问成功

[root@node1 ~]# ssh 172.20.1.102
#输入密码
[root@node2 ~]# exit
[root@node1 ~]# ssh 172.20.1.112
#权限拒绝

【例6】当我们在allow和deny⽂件中配置相同的内容时,allow优先级⾼,执⾏allow的配置规则

[root@node2 ~]# vim /etc/hosts.allow
sshd:172.20.1.101
[root@node2 ~]# vim /etc/hosts.deny
sshd:172.20.1.101

在node1上使⽤ssh访问node2, 访问成功:

[root@node1 ~]# ssh 172.20.1.102
输入密码;
[root@node2 ~]# exit

【例7】同时配置多个服务,服务间使⽤“,”分开即可 在node2上安装telnet服务,然后启动该服务:

[root@node2 ~]# rpm -ql telnet-server
[root@node2 ~]# yum -y install telnet-server
[root@node2 ~]# systemctl start telnet.socket
[root@node2 ~]# ss -tnl
#查看是否有telnet监听端口23

配置hosts.deny⽂件添加telnet:

[root@node2 ~]# vim /etc/hosts.deny
sshd,in.telnetd:172.20.1.101
[root@node2 ~]# vim /etc/hosts.allow
sshd:172.20.1.101

然后验证⼀下 sshd服务访问成功,telnet访问失败:

[root@node1 ~]# yum -y install telnet
[root@node1 ~]# ssh 172.20.1.102
输入密码;
[root@node2 ~]# exit
[root@node1 ~]# telnet 172.20.1.102
输入登录账户:root
输入密码,失败;

【例8】现在客户端的多种写法格式

# 禁止172.20.1.开头的所有ip地址
#sshd:172.20.1.

#禁止172.20.1.0/24 网段内的所有主机(cnetos7支持此种写法)
#ssh:172.20.1.0/24

#禁止172.20.1.0/255.255.255.0网段内的所有地址
#ssh:172.20.1.0/255.255.255.0

#禁止所有ip地址
#ssh:ALL

#禁止不包含.号的主机名的主机访问
#ssh:LOCAL

#禁止所有主机名可以解析的地址
#ssh:KNOW

#禁止不能解析的域名主机
#ssh:UNKNOW

#禁止域名解析和反解析不匹配的主机
#ssh:PARANOID

【例9】配置规则中的EXCEPT⽤法,功能为排除某些内容 在deny⽂件中使⽤EXCEPT:

[root@node2 ~]# vim /etc/hosts.deny
sshd:172.20.1. EXCEPT 172.20.1.103
文件/etc/hosts.allow没有配置;如果有把之前配置删除

使⽤node1登录node2,验证是否可以登录成功:(拒绝登录)

[root@node1 ~]# ssh 172.20.1.102
权限拒绝;

使⽤node3登录node2,验证是否可以登录成功:(登录成功):

[root@node3 ~]# ssh 172.20.1.102
输入密码;
[root@node2 ~]# exit

建议不要在allow和deny中同时组合使⽤逻辑复杂的包含和排除关系。

在allow⽂件中是deny逻辑:

[root@node2 ~]# vim /etc/hosts.allow
sshd:172.20.1. EXCEPT 172.20.1.103 :deny
文件/etc/hosts.deny没有配置;

测试⼀下node1和node3是否可以访问node2:

#node1被拒绝。
[root@node1 ~]# ssh 172.20.1.102
权限拒绝;
#node3 允许ssh链接:
[root@node3 ~]# ssh 172.20.1.102
输入密码;
[root@node2 ~]# exit

【例10】spawn可以实现在配合后调⽤外部功能,⽐如可在调⽤echo,实现⼀个访问记录功能

[root@node2 ~]# mkdir -pv /data/
[root@node2 ~]# vim /etc/hosts.allow
sshd:ALL:spawn echo `date +'%%F %%T'` login from client %c to server %s >> /data/sshd.log

然后使⽤node1 链接⼀次node2主机:

[root@node1 ~]# ssh 172.20.1.102
输入密码;
[root@node2 ~]# exit

查看⼀下,是否有⽇志⽣成:

[root@node2 ~]# cat /data/sshd.log
2022-04-14 11:15:24 login from client 192.168.37.7 to server sshd@192.168.37.8

【例11】配置twist,实现功能替换操作

[root@node2 ~]# vim /etc/hosts.allow
sshd:ALL:twist /bin/echo "400 deny to access, go away!!"

然后在node1上使⽤ssh链接node2: [root@node1 ~]# ssh -v 172.20.1.102 【例12】使⽤tcpdmatch⼯具进⾏配置⽂件测试 实际使⽤过程中,有些配置规则很可能对当前ssh有影响,为了减少这种情况发⽣的⼏率,我们可以在某个实验的⽂件夹中 编写测试配置⽂件,进⾏测试。 在node2服务器的/data⽬录下 创建hosts.deny ⽂件,使⽤tcpdmatch进⾏测试.

mkdir /data
yum -y install tcp_wrappers 
cd /data
vim /hosts.deny
sshd:ALL

tcpdmatch -d sshd 172.20.2.101

实验八:ssh命令

⽬的

掌握配置ssh、客户端的使用。

前提

系统版本 ip地址 主机名
CentOS7 192.168.1.143 node2
CentOS7 192.168.1.128 node3

实验步骤

  1. ssh客户端连接服务器

【例1】在node2上使⽤root⽤户登录node3服务器

输⼊:ssh 192.168.1.128 默认是以ssh客户端发起者的root⽤户⾝份,登录远程node2的root⽤户

[root@node2 ~]# ssh 192.168.1.128
输入:yes
输入密码:
即可登录。

【例2】ssh连接时还有其他选项,-v 显⽰详细登录信息, -p 指定主机的ssh服务端端⼝号 -b指定本地的ip址

[root@node2 ~]# ssh -p 22 -b 192.168.1.143 root@192.168.1.128
输入密码;
即可登录。
  1. ssh基于公私钥验证是否 是特定客户端

【例4】使⽤node2登录node3的root⽤户是,第⼀次提⽰要确认对⽅是否是⾃⼰想要链接的主机,确认后输⼊yes,然后,输⼊root的密码即可登录成功。登录成功后会在客户端的.ssh路径下创建⼀个known_hosts⽂件,内部保存着远程主机的ip地址和对⽅ssh服务端的公钥信息

[root@node2 ~]#cd .ssh/
[root@node2 .ssh]# cat known_hosts
192.168.1.128 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCgUNOBs3yKLKbYvSXLPsOxvfnQrbawKZavDDjSaQjFeKsf7ckZ7XtSV+7rQu6du4J9StPxjCY5/XLXp2iQE7wM=

【例5】查看⼀下node3 sshd服务的公钥对⽐⼀下,应该是⼀样的

[root@node3 ~]# cat /etc/ssh/ssh_host_ecdsa_key.pub
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBCgUNOBs3yKLKbYvSXLPsOxvfnQrbawKZavDDjSaQjFeKsf7ckZ7XtSV+7rQu6du4J9StPxjCY5/XLXp2iQE7wM= 
  1. 开启服务器node1, 将node3的sshd服务对应的公私钥⽂件拷到node1节点,给node1添加⼀个node3的ip地址, 然后使⽤node2 链接node1,验证⼀下登录时是否有提⽰信息,是否需要输⼊yes

【例5】将node3的配置⽂件拷贝到node1的/data下,拷贝ecdsa_key 和ecdsa_key.pub就好,然后关闭node3服务器

#在node3上:
[root@node3 ~]# cd /etc/ssh/
[root@node3 ~]# scp ssh_host_ecdsa_key node1:/data/
[root@node3 ~]# scp ssh_host_ecdsa_key.pub node1:/data/
[root@node3 ~]# init 0

【例6】将node1中/etc/ssh中对应的两个公私钥⽂件内容替换成/data路径下node3的对应⽂件,然后给node1添加原来 node3的ip地址192.168.1.128

[root@node1 ~]# cat /data/ssh_host_ecdsa_key > /etc/ssh/ssh_host_ecdsa_key
[root@node1 ~]# cat /data/ssh_host_ecdsa_key.pub > /etc/ssh/ssh_host_ecdsa_key.pub
#把MAC、IP地址改成一样的
[root@node1 ~]# ip a a 192.168.1.128 dev ens33

【例7】现在使⽤node2主机连接192.168.1.128 查看、发现ssh报警

[root@node2 ~]# ssh 192.168.1.128
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:Mp/PudXpjODf/xvxl5nLOGFmKNUDYWaTSCF0mRf8+PI.
Please contact your system administrator.
Add correct host key in /root/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /root/.ssh/known_hosts:1
RSA host key for 192.168.1.128 has changed and you have requested strict checking.
Host key verification failed.

【例8】假如我现在node3[192.168.1.128]主机淘汰、换了新node3[192.168.1.128]设备、现在就想连接

[root@node2 ~]# rm -rf .ssh/known_hosts
[root@node2 ~]# ssh 192.168.1.128
#可以连接
  1. SSH X 转发

准备两台图形界⾯的服务器

操作系统版本 		Ip地址 			主机名
CentOS6.9 	192.168.37.6 		node1
CentOS6.9 	192.168.37.5 		node2

【例8】在node1上使⽤终端连接node2,连接成功后执⾏gedit命令,报错打不开 在这里插入图片描述

【例9】在node1上使⽤终端 加上-X 选项 连接node2 ,再次执⾏gedit命令,成功打开node2的图形化界⾯gedit程序 在这里插入图片描述

【例10】使⽤windows中xmanager打开node2的桌⾯系统 打开xmanager中的xstart,输⼊node2的ip地址,选择ssh协议,填⼊root⽤户名 在这里插入图片描述

【例11】在命令处选择 ,8GONME(Gonme-session), 如图,点击运⾏ 在这里插入图片描述

【例12】连接成功,可以远程图形界⾯操作node2了 在这里插入图片描述

  1. ssh 跳转操作
操作系统 		ip地址 			主机名
CentOS7 	192.168.1.145 		node1
CentOS7 	192.168.1.143 		node2
CentOS7 	192.168.1.128 		node3

【例7】在node3的主机上添加防⽕墙规则,禁⽌node1的ssh访问

[root@node3 ~]# iptables -F
[root@node3 ~]# iptables -A INPUT -s 192.168.1.145 -j REJECT
[root@node3 ~]# iptables -vnL

【例8】测试⼀下node1是否可以ping通node3, 是否可以ssh链接的node3

[root@node1 ~]#ping 192.168.1.128
#ping不通
[root@node1 ~]#ssh 192.168.1.128
#拒绝连接。

【例9】使⽤node1 链接node2,然后再⽤node2链接node3 达到从node1访问node3的⽬的

[root@node1 ~]# ssh 192.168.1.143
#输入密码即可。
[root@node2 ~]# ssh 192.168.1.128
#输入密码即可。

[root@node3 ~]# ip a
#此时显示为node3的IP

【例10】直接在node1上执⾏ssh命令也可以实现通过node2链接node3,如图: 分别输⼊node2,和node3的密码即可成功登录node3服务器

[root@node1 ~]# ssh -t 192.168.1.143 ssh 192.168.1.128
输入143的密码;
输入128的密码;

在这里插入图片描述

  1. 使⽤ssh命令在远程主机上执⾏单条命令后返回结果,然后退出 【例1】使⽤上个试验的node1主机通过ssh在node2上执⾏⼀个ip a 的命令,然后退出,如图:
[root@node1 ~]# ssh 192.168.1.143 'ip a'
root@192.168.1.143's password: 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:87:a5:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.143/24 brd 192.168.1.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe87:a5c7/64 scope link 
       valid_lft forever preferred_lft forever
 [root@node1 ~]#      
  1. SSH基于密码的验证,登录对⽅主机时需要输⼊对⽅对应⽤户的密码才可登录
系统发现版本 IP地址 主机名
CentOS7 192.168.11.117 node1
CentOS7 192.168.11.118 node2
CentOS7 192.168.11.235 node3

【例1】实现基于密码的登录验证⽅式,简单的说就是使⽤对⽅主机⽤户名和密码进⾏登录 使⽤node1 登录node2的root账户,输⼊密码后,即可登录node2服务器的root

ssh root@192.168.11.118
输入:yes
输入密码;
  1. SSH基于公钥验证,实现免密登录远程主机

在node1主机上⽣成公私钥对,将⽣成的公钥拷贝到node2主机上,让后通过node1;ssh链接node2的对应账户,将不需 要输⼊对⽅的密码就可登录。使⽤主机环境同上。

【例1】在node1主机上使⽤ssh-keygen -t rsa ⽣成公私钥对,执⾏过程中直接按回车键使⽤默认选项即可。然后再 ~/.ssh⽂件夹中查看对应的公钥⽂件

[root@node1 ~]# ssh-keygen -t rsa

【例2】使⽤ssh-copy-id 命令将node1的公钥传送到node2的~/.ssh/authorized_keys⽂件中

ssh-copy-id 192.168.11.118
输入:yes
输入密码;

在这里插入图片描述

查看⼀下node2的对应⽂件重的内容是否为node1刚⽣产的公钥信息,内容应该包含node1的公钥。

【例3】在node1上使⽤ssh链接node2主机的root账户。不需要输⼊密码直接登录成功,ssh基于公钥验证的实验 完成

[root@node1 ~]# ssh root@192.168.11.118
Last login: Fri Apr 15 16:33:24 2022 from 192.168.11.117
[root@node2 ~]# 

【例4】将node2中的~/.ssh/authorized_keys⽂件清空后,ssh⼜恢复到基于密码验证。 在node2中清空对应⽂件:

[root@node2 ~]# cd .ssh/
[root@node2 .ssh]# echo > authorized_keys

使⽤node1链接node2的root⽤户,提⽰需要输⼊密码:

[root@node1 ~]# ssh root@192.168.11.118
要求输入密码;

【例5】某些业务场景将,需要多的服务器之间相互免密登录,则需要分别拷贝⾃⼰的公钥到对⽅主机的授权⽂件中,实现 起来相对繁琐。这⾥我们可以让所有的服务器使⽤相同的公私钥,这样既可以减少相互拷贝公钥的⼯作量。

在node1上使⽤ssh-keygen -t rsa⽣成公私钥,让后拷贝⾃⼰的公钥到⾃⼰的authorized_keys中,最后将整个~/.shh ⽂件夹拷贝到node2和node3中。

在node1上使⽤ssh-keygen -t rsa⽣成公私钥:

[root@node1 ~]# ssh-keygen -t rsa

在node1上使⽤ssh-copy-id将公钥拷贝到⾃⼰的authorized_keys中:

[root@node1 ~]# ssh-copy-id root@192.168.11.117
输入密码;

查看⼀下node1的公钥和authorized_keys内容是否⼀样。

[root@node1 ~]# cat .ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1zz+CYa0dHZUuFDPfKB6oMmot2GgcBzQWI/Qly0Wkf3a2q1k3QwricW0pQG9qeTOkzCaGvJJjS0fTUSUPFHKT7+Q4OhTTvTtFsSf4Q8CrYHSCQ1OuyT70AUP9Mxjja5G2fnRYxMUCG4OAjOVaVplSWeKgG1HBJyFrI1Ros1JKuGGDJDO8NV8C7q5dVIyvMBUURmOOKw+kEqfQgRbS6plwkuUeyCcFmos97z/QxxT+yqFoAQKg6MlER3MdxMWJMsAwWWConEUFO8M0+CppdKrm8AOkBAmzZ2nYsMfewhpfldwIiUKAHXcgXtYgSxUevOwQ3i7ptvDmYn976Ry8zXW7 root@node1
[root@node1 ~]# cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC1zz+CYa0dHZUuFDPfKB6oMmot2GgcBzQWI/Qly0Wkf3a2q1k3QwricW0pQG9qeTOkzCaGvJJjS0fTUSUPFHKT7+Q4OhTTvTtFsSf4Q8CrYHSCQ1OuyT70AUP9Mxjja5G2fnRYxMUCG4OAjOVaVplSWeKgG1HBJyFrI1Ros1JKuGGDJDO8NV8C7q5dVIyvMBUURmOOKw+kEqfQgRbS6plwkuUeyCcFmos97z/QxxT+yqFoAQKg6MlER3MdxMWJMsAwWWConEUFO8M0+CppdKrm8AOkBAmzZ2nYsMfewhpfldwIiUKAHXcgXtYgSxUevOwQ3i7ptvDmYn976Ry8zXW7 root@node1

删除node2和node3中的.ssh ⽂件夹:

[root@node2 ~]# rm -rf .ssh/
[root@node3 ~]# rm -rf .ssh/

拷贝node1的.ssh⽂件到node2和node3的对应位置:

[root@node3 ~]# scp -pr .ssh root@192.168.11.118:/root
[root@node3 ~]# scp -pr .ssh root@192.168.11.235:/root

使⽤node1,node2和node3的root分别登录其他两个服务器root账户,分别登录成功:

在node1上,分别测试:
ssh 192.168.11.118
ssh 192.168.11.235

在node2上,分别测试:
ssh 192.168.11.117
ssh 192.168.11.235
需要输入密码;

在node3上,分别测试:
ssh 192.168.11.117
ssh 192.168.11.118
  1. 由于ssh基于公钥验证的⽅式依赖于公私钥,因此私钥的安全性需要的到保障,可以通过加密私钥的⽅法提⾼安全性

对已⽣成的私钥进⾏加密,使⽤ssh-keygen -p 实现。删除node2的.ssh⽬录,重新拷贝node1的公钥到node2的 authorized_keys 中,然后使⽤node1登录node2时,需要输⼊node1私钥的密码才能登录

【例1】

[root@node1 ~]# ssh-keygen -p
根据需要输入即可;

在这里插入图片描述

10、每次登录都需要输⼊私钥的密码,使⽤起来⽐较繁琐。我们可以使⽤ ssh-agent bash 和ssh-add 对私钥 密码在本次回话中托管。减少输⼊私钥密码的次数

【例1】安装psmisc软件包,查看当前ssh回话状态

[root@node1 ~]# yum -y install psmisc
[root@node1 ~]# pstree |grep ssh
        |-sshd---sshd---bash-+-grep

然后使⽤ssh-agent bash 开启⼀个bash:

[root@node1 ~]# ssh-agent bash
[root@node1 ~]# pstree | grep ssh
        |-sshd---sshd---bash---bash-+-grep
        |                           `-ssh-agent

在新开启的bash中执⾏ssh-add 并输⼊私钥密码。然后连接node2,成功连接不需要输⼊密码:

[root@node1 ~]# ssh-add
根据需要输入即可;
[root@node1 ~]# ssh 192.168.11.118
  1. 基于公钥的登录⽅式在Xshell中实现 【例1】在windows中使⽤Xshell客户端⼯具⽣成公私钥对 点击xshell的⼯具,选择新建⽤户秘钥向导: 在这里插入图片描述

在弹出的对话框中选择rsa加密算法和秘钥长度,点击下⼀步:

在这里插入图片描述⽣成秘钥后点击下⼀步: 在这里插入图片描述

给秘钥起⼀个名称,根据需要决定是否需要设置私钥密码。然后点击下⼀步: 在这里插入图片描述

将公钥⽂件复制出来,点击完成,然后将公钥写⼊到node1的authorized_keys中: 在这里插入图片描述

cat .ssh/authorized_keys

在Xshell中新建⼀个连接,填写对应的ip地址和端⼝号: 在这里插入图片描述

选择⽤户⾝份验证,⽅法选择publickey,然后输⼊⽤户名,选择之前⽣成的⽤户密码,最后点击确定: 在这里插入图片描述

⽣成会话后点击连接,测试⼀下是否不需要输⼊root密码即可登录成功: 在这里插入图片描述

Xshell基于公钥验证的登录⽅式验证成功,直接登录上了, 不需要输⼊root密码: 在这里插入图片描述

  1. 脚本实现拷贝公钥,登录主机

【例1】创建⼀个简单的shell脚本,完成基于公钥的密码登录

cat sshkeyau.sh
#!/bin/bash
rpm -q expect &> /dev/null || yum -y install expect
ssh-keygen -P "" -f "/root/.ssh/id_rsa"
userpwd="123456"
while read ipaddr;do
expect <<EOF
set timeout 10
spawn ssh-copy-id $ipaddr
expect {
 "yes/no" {send "yes\n"; exp_continue}
 "password" {send "$userpwd\n"}
}
expect eof
EOF
done < ip.txt

cat ip.txt
192.168.11.118
192.168.11.235

执⾏脚本 bash sshkeyau.sh:

rm -rf .ssh
bash sshkeyau.sh

使⽤node1 链接node2主机,验证脚本是否运⾏正常:

ssh 192.168.11.118
exit

实验九:scp命令

目的

scp: secure copy (remote file copy program) ,scp 命令功能为 远程文件拷贝。
常用的选项有:

  • -p 保留文件原因权限
  • -q静默模式工作
  • -c压缩文件
  • -P指定远程端口号
  • -r 递归复制所有内容

前提

系统发行版 ip地址 主机名
CentOS7 172.20.1.101 node1
CentOS7 172.20.1.102 node2
CentOS7 172.20.1.103 node3
安装了openssh-clients。

实验步骤

  1. scp 命令的使⽤,scp命令是ssh-client软件包的⼀个命令
rpm -ql openssh-clients

【例1】将node1服务器上的/data/下的所有内容 拷贝到node2主机的/data/⽬录下

[root@node1 ~]# ll /data/
total 0
-rw-r--r-- 1 root root 0 Apr 15 19:48 1.txt
-rw-r--r-- 1 root root 0 Apr 15 19:48 2.log
-rw-r--r-- 1 root root 0 Apr 15 19:48 3.sh

[root@node1 ~]# scp -pr -P 22 /date/ root@172.20.1.102:/data/

拷贝成功。

  1. rsync

常用的选项有: -v 显示复制过程, -r递归复制目录树, -p保留原文件权限, -t保留原文件时间戳, -g保留组信息, -o保留所有者权限, -l 将软连接文件本身进行复制, -L复制软连接文件只想的文件。 -a 存档,相当于-rlptgoD,但不保留-ACL(-A),和selinux属性(-X)

【例1】rsync 远程同步⽂件程序,需要安装rsync软件包,基本描述信息如下

yum -y install rsync
yum info rsync

【例2】node1的/data/下的所有⽂件拷贝到 node2的/root/data/⽂件夹下

rsync -arv /data/ 172.20.1.102:/data/

查看node2的/data/ 下是否有对应的⽂件。

[root@node2 ~]# ls /data/
1.txt  2.log  3.sh

现在删除/data⽬录下的1.txt和2.log⽂件,

[root@node2 ~]# cd /data/
[root@node2 data]# rm -rf 1.txt 2.log 

然后在node1服务器再次执⾏之前的同步命令:

[root@node1 ~]# rsync -arv /data/ 172.20.1.102:/data/
root@172.20.1.102's password: 
sending incremental file list
./
1.txt
2.log

sent 152 bytes  received 53 bytes  82.00 bytes/sec
total size is 0  speedup is 0.00

发现他只同步了刚才删除的⽂件。

现在在对node2中/data/⽂件中的1.txt 进⾏清空操作:

[root@node2 ~]# cd /data/
[root@node2 data]# echo > 1.txt 

然后再次在node1中执⾏刚才的同步命令,发现只对network-functions⽂件进⾏同步。这两个实验操作证明rsync只对有差异的⽂件进⾏同步,效率⽐较⾼。

[root@node1 ~]# rsync -arv /data/ 172.20.1.102:/data
root@192.168.37.7's password: 
sending incremental file list
1.txt

sent 110 bytes  received 37 bytes  42.00 bytes/sec
total size is 0  speedup is 0.00
  1. sftp 同样是openssh-clients软件包的⼀个命令,可以⽤ftp的⽅式访问对⽅服务器 【例1】
sftp 172.20.1.101
sftp> mget sshkeyau.sh
sftp> exit

在这里插入图片描述

  1. pssh命令 pssh是⼀个python编写的远程执⾏命令⼯具,可在多个机器上同时执⾏名,和复制⽂件。 【例1】在node1上使⽤pssh命令获取node2主机的主机名
[root@node1 ~]# pssh -H "172.20.1.102" -A -i hostname

在这里插入图片描述

【例2】在node1上编写主机地址⽂件ip.txt, 同时获取对应主机的hostname ⾸先使⽤node1分别登录登录node2和node3,这样就不⽤输⼊验证的yes; 然后执⾏命令 同时获取node2和node3的hostname:

[root@node1 ~]# ssh 172.20.1.103
exit
[root@node1 ~]# ssh 172.20.1.102
exit

执⾏命令,输⼊密码,成功获取node2和node3的主机名。

[root@node1 ~]# pssh -h ip.txt -A -i hostname

上述中每次都要输⼊对应主机的密码,⽐较⿇烦,现在设置基于公钥验证,⾸先进⾏免密配置:

[root@node1 ~]# ssh-copy-id 172.20.1.102
[root@node1 ~]# ssh-copy-id 172.20.1.103

然后在node1中测试⼀下免密登录node2 和 node3,最后执⾏命令,获取node2和node3主机名成功:

ssh 172.20.1.103
exit
ssh 172.20.1.102
exit
pssh -h ip.txt -i hostname

在此基础上实现修改node2和node3的selinux配置⽂件功能:

⾸先查看node2和node3的selinux 配置⽂件:

[root@node2 ~]# grep SELINUX= /etc/selinux/config

[root@node3 ~]# grep SELINUX= /etc/selinux/config

然后执⾏pssh命令实现统⼀修改SELINUX=disabled:

[root@node1 ~]# pssh -h ip.txt 'sed -i "s/^SELINUX=.*/SELINUX=disabled/" /etc/selinux/config'

查看⼀下node2和node3的配置⽂件是否修改成功:

[root@node2 ~]# grep SELINUX= /etc/selinux/config

[root@node3 ~]# grep SELINUX= /etc/selinux/config

还可以执⾏脚本完成:

[root@node1 ~]# cat test.sh
#!/bin/bash
echo $HOSTNAME

[root@node1 ~]# chmod +x test.sh

使⽤pscp拷贝到node2和node3的/root/下:

[root@node1 ~]# pscp.pssh -h ip.txt test.sh /root/
[root@node1 ~]# pssh -h ip.txt -i /root/test.sh
  1. 使⽤pslurp 命令下载远程主机的⽂件到本地

在node1中执⾏命令,下载node2中/etc/hostname⽂件,到node的/root路径下,并起名为nodename:

[root@node1 ~]# pslurp -H 172.20.1.102 -L /root/ /etc/hostname nodename
[root@node1 ~]# cd 172.20.1.102/
[root@node1 ~]# ls
[root@node1 ~]# cat nodename

在这里插入图片描述