文章目录
Ansible常用模块
准备环境
设备 | IP 地址 | 名称 | 安装 | |
---|---|---|---|---|
redhat8 | 192.168.91.128 | 控制端 | localhost | ansible 2.9 .23 |
redhat8 | 192.168.91.129 | 被控端 | node1 | yum |
1. ansible常用模块使用详解
ansible常用模块有:
- ping
- yum
- template
- copy
- user
- group
- service
- raw
- command
- shell
- script
ansible常用模块raw、command、shell的区别:
- shell模块调用的/bin/sh指令执行
- command模块不是调用的shell的指令,所以没有bash的环境变量
- raw很多地方和shell类似,更多的地方建议使用shell和command模块。但是如果是使用老版本python,需要用到raw,又或者是客户端是路由器,因为没有安装python模块,那就需要使用raw模块了
2. ansible常用模块之ping
ping模块用于检查指定节点机器是否连通,用法很简单,不涉及参数,主机如果在线,则回复pong
/ / 来到指定ansible的目录下查看文件信息
[root@localhost project]# cat inventories
[webservers]
192.168.91.129
/ / 因为之前设置过免密,所以可以直接ping通(没有免密,需要后面跟账号密码)
[root@localhost project]# ansible all -m ping
192.168.91.129 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"ping": "pong"
}
3. ansible常用模块之command
command模块用于在远程主机上执行命令,ansible默认就是使用command模块。
command模块有一个缺陷就是不能使用管道符和重定向功能。
不支持重定向符示例:
/ / 虽然使用command在node1的tom用户/tmp/目录下创建abc文件执行成功了
[root@localhost project]# ansible all -m command -a 'echo "hello word" > /tmp/abc'
192.168.91.129 | CHANGED | rc=0 >>
hello word > /tmp/abc
[root@node1 ~]# id tom
uid=1000(tom) gid=1000(tom) groups=1000(tom)
[root@node1 ~]# su - tom
Last login: Thu Jul 15 16:31:10 CST 2021 on pts/1
/ / 但是tom用户下并没有这个文件。就是因为commanbd模块不支持重定向符
[tom@node1 ~]$ cd /tmp/
[tom@node1 tmp]$ ls
ks-script-us_ovm41
vmware-root_1023-4248090784
vmware-root_1043-4257200433
vmware-root_1044-2991203048
vmware-root_1053-4290756408
vmware-root_1060-2957649088
vmware-root_981-4290756372
不支持管道符示例:
/ / 1.再看这边直接使用command进行环境变量查看路径没有问题
[root@localhost project]# ansible all -m command -a 'echo $PATH'
192.168.91.129 | CHANGED | rc=0 >>
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
/ / 但是当你使用管道符将其过滤时,发现并没有过滤你需要的信息,而是把你输入的命令直接输出出来
[root@localhost project]# ansible all -m command -a 'echo $PATH | grep sbin'
192.168.91.129 | CHANGED | rc=0 >>
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin | grep sbin
/ / 2.这边直接报错,不支持管道符。这两个例子都很明显说明command不支持管道符
[root@localhost project]# ansible all -m command -a "df -h|awk '{print $4}'"
192.168.91.129 | FAILED | rc=1 >>
df: invalid option -- '|'
Try 'df --help' for more information.non-zero return code
/ / 没有bash环境变量,set这种需要bash环境变量的命令也是无法使用的
[root@localhost project]# ansible all -m command -a 'set'
192.168.91.129 | FAILED | rc=2 >>
[Errno 2] No such file or directory: b'set': b'set'
4. ansible常用模块之shell
shell模块用于在受控机上执行受控机上的脚本,亦可直接在受控机上执行命令
shell模块用于在远程主机上执行命令,其支持管道符与重定向
shell模块可以查看set命令
[root@localhost project]# ansible all -m shell -a 'set'
192.168.91.129 | CHANGED | rc=0 >>
BASH=/bin/sh
BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASH_ALIASES=()
支持管道符示例:
1.使用shell模块把信息写入到/tmp/abc文件中使用成功
[root@localhost project]# ansible all -m shell -a 'df -h > /tmp/abc'
192.168.91.129 | CHANGED | rc=0 >>
[root@node1 ~]# su - tom
Last login: Sat Jul 17 17:20:00 CST 2021 on pts/0
[tom@node1 ~]$ cd /tmp/
/ / 查看发现abc文件创建成功,信息也有
[tom@node1 tmp]$ ls
abc
ks-script-us_ovm41
vmware-root_1023-4248090784
vmware-root_1043-4257200433
vmware-root_1044-2991203048
vmware-root_1053-4290756408
vmware-root_1060-2957649088
vmware-root_981-4290756372
[tom@node1 tmp]$ cat abc
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.6G 0 1.6G 0% /dev
tmpfs 1.6G 0 1.6G 0% /dev/shm
tmpfs 1.6G 8.9M 1.6G 1% /run
tmpfs 1.6G 0 1.6G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 1.5G 16G 9% /
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 324M 0 324M 0% /run/user/0
2.把脚本写入到test.log
/ / 创建一个脚本并执行
[root@node1 ~]# vi test.sh
[root@node1 ~]# chmod +x test.sh
[root@node1 ~]# ll
total 8
-rw-------. 1 root root 1184 Jul 13 09:38 anaconda-ks.cfg
-rwxr-xr-x. 1 root root 25 Jul 17 19:54 test.sh
/ / 写入到/tmp/test.sh文件下
[root@localhost project]# ansible all -m shell -a '/bin/bash /root/test.sh &> /tmp/test.log'
192.168.91.129 | CHANGED | rc=0 >>
/ / 查看test.sh文件和脚本
[root@localhost project]# ansible all -m shell -a 'cat /tmp/test.log'
192.168.91.129 | CHANGED | rc=0 >>
hehe
[root@node1 ~]# /bin/bash /root/test.sh
hehe
/ / shell可以使用管道符
[root@localhost project]# ansible all -m shell -a 'ps -ef | grep sshd'
192.168.91.129 | CHANGED | rc=0 >>
root 1143 1 0 19:43 ? 00:00:00 /usr/sbin/sshd -D -oCiphers=aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,aes256-ctr,aes256-cbc,aes128-gcm@op
5. ansible常用模块之raw
raw模块用于在远程主机上执行命令,其也支持管道符与重定向
/ / raw也是支持set命令
[root@localhost project]# ansible all -m raw -a 'set'
192.168.91.129 | CHANGED | rc=0 >>
BASH=/usr/bin/bash
BASHOPTS=cmdhist:complete_fullquote:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
/ / raw当然也是支持重定向符的
[root@localhost project]# ansible all -m raw -a 'df -h > /tmp/abd'
192.168.91.129 | CHANGED | rc=0 >>
Shared connection to 192.168.91.129 closed.
[tom@node1 tmp]$ ls
abc
abd
ks-script-us_ovm41
vmware-root_1023-4248090784
vmware-root_1043-4257200433
vmware-root_1044-2991203048
vmware-root_1053-4290756408
vmware-root_1060-2957649088
vmware-root_981-4290756372
[tom@node1 tmp]$ cat abd
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.6G 0 1.6G 0% /dev
tmpfs 1.6G 0 1.6G 0% /dev/shm
tmpfs 1.6G 8.9M 1.6G 1% /run
tmpfs 1.6G 0 1.6G 0% /sys/fs/cgroup
/dev/mapper/rhel-root 17G 1.5G 16G 9% /
/dev/sda1 1014M 179M 836M 18% /boot
tmpfs 324M 0 324M 0% /run/user/0
/ / raw可以使用管道符
[root@localhost project]# ansible all -m raw -a 'ss -ant|grep ESTAB'
192.168.91.129 | CHANGED | rc=0 >>
ESTAB 0 0 192.168.91.129:22 192.168.91.1:51361
ESTAB 0 108 192.168.91.129:22 192.168.91.128:44660
Shared connection to 192.168.91.129 closed.
注意:这三个模块都是万能模块,不到万不得已不使用这些,因为它们没有幂等性。比如你去ping的时候是SUCCESS显示你执行成功。三面三个模块执行成功报的CHANGED,它们会去改变,不管你之前是否存在。当shell或command模块运行时,通常会基于它是否引想了计算机的状态而报告CHANGED状态
如果需要使用它们的时候,可能最好先尝试使用command模块,因为它使用python进行交互的,它无法执行,在需要使用特殊功能的时候我们再去使用shell和raw模块。
[root@localhost project]# ansible all -m ping
192.168.91.129 | SUCCESS => {
[root@localhost project]# ansible all -m raw -a 'set'
192.168.91.129 | CHANGED | rc=0 >>
[root@localhost project]# ansible all -m raw -a 'df -h > /tmp/abd | grep Filesystem'
192.168.91.129 | FAILED | rc=1 >>
6. ansible常用模块之script
script模块用于在受控机上执行主控机上的脚本
/ / 创建一个目录scripts,在里面写入一个test.sh脚本
[root@node1 ~]# id ttm
id: ‘ttm’: no such user
[root@localhost project]# mkdir /scripts
[root@localhost project]# cd /scripts/
[root@localhost scripts]# ls
[root@localhost scripts]# vim test.sh
/ / 创建一个ttm用户,密码设置为“redhat”,并把“hell oworld”写入到家目录的/ttm/abc文件下
[root@localhost scripts]# cat test.sh
#!/bin/bash
useradd ttm
echo "redhat" | passwd --stdin ttm
echo "hello world" > ~ttm/abc
[root@localhost scripts]# cd -
/opt/project
/ / 直接执行会报错,因为没有给他设置执行权限
[root@localhost project]# ansible all -m script -a '/bin/bash /scripts/test.sh'
192.168.91.129 | FAILED! => {
"changed": true,
"msg": "non-zero return code",
/ / 给它写入执行权限
[root@localhost project]# ll /scripts/
total 4
-rw-r--r--. 1 root root 90 Jul 17 20:05 test.sh
[root@localhost project]# chmod +x /scripts/test.sh
[root@localhost project]# ll /scripts/
total 4
-rwxr-xr-x. 1 root root 90 Jul 17 20:05 test.sh
/ / 重新执行并成功
[root@localhost project]# ansible all -m script -a '/scripts/test.sh'
192.168.91.129 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.91.129 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.91.129 closed."
],
"stdout": "Changing password for user ttm.\r\npasswd: all authentication tokens updated successfully.\r\n",
"stdout_lines": [
"Changing password for user ttm.",
"passwd: all authentication tokens updated successfully."
]
}
/ / 查看ttm用户是否存在,家目录下是否有abc这个文件
[root@node1 ~]# id ttm
uid=1001(ttm) gid=1001(ttm) groups=1001(ttm)
/ / 退出远程登录,手打输入ip和密码登录,查看密码是否为redhat
[C:\~]$ ssh ttm@192.168.91.129
Connecting to 192.168.91.129:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Sat Jul 17 20:17:11 2021
/ / 登录成功查看其家目录下有没有abc文件
[ttm@node1 ~]$ ls
abc
7. ansible常用模块之template
template模块用于生成一个模板,并可将其传输至远程主机上。(文件传输)
模板:是可以传输变量的
/ / 查看家目录文件
[root@localhost project]# ls ~
1.txt anaconda-ks.cfg ara def rfg
abc ansible.cfg bbd passwd
/ / 把家目录文件~/anaconda-ks.cfg传到被控机的/tmp/hehe文件下面
[root@localhost project]# ansible all -m template -a 'src=~/anaconda-ks.cfg dest=/tmp/hehe'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "07e141f6aed58d6ccec8ecd09f8f3b0945bcd959",
"dest": "/tmp/hehe",
"gid": 0,
"group": "root",
"md5sum": "52f4578155b507c8fa1ef392f23113fd",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 1184,
"src": "/root/.ansible/tmp/ansible-tmp-1626525158.6790378-2194-262408274777561/source",
"state": "file",
"uid": 0
}
/ / 主控机与被控机进行信息对比,发现一致,说明传输成功
[root@node1 ~]# ls /tmp/
abc
hehe
[root@node1 ~]# head -3 /tmp/hehe
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
[root@localhost project]# head -3 ~/anaconda-ks.cfg
#version=RHEL8
ignoredisk --only-use=sda
autopart --type=lvm
8. ansible常用模块之yum
yum模块用于在指定节点机器上通过yum管理软件,其支持的参数主要有两个
- name:要管理的包名
- state:要进行的操作
state常用的值:
- latest:安装软件
- installed:安装软件
- present:安装软件
- removed:卸载软件
- absent:卸载软件
若想使用yum来管理软件,请确保受控机上的yum源无异常。
/ / 使用installed下载vsftpd安装包
[root@localhost project]# ansible all -m yum -a 'name=vsftpd state=installed'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed: vsftpd-3.0.3-31.el8.x86_64"
]
}
/ / 查看下载是否成功
[root@localhost project]# ansible all -m shell -a 'rpm -qa|grep vsftpd'
192.168.91.129 | CHANGED | rc=0 >>
vsftpd-3.0.3-31.el8.x86_64
/ / 使用absent删除vsftpd
[root@localhost project]# ansible all -m yum -a 'name=vsftpd state=absent'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Removed: vsftpd-3.0.3-31.el8.x86_64"
]
}
/ / 查看vsftpd是否被删除,以及去掉警告(command_warnings=False)
[root@localhost project]# ansible all -m shell -a 'rpm -qa|grep vsftpd'
[WARNING]: Consider using the yum, dnf or zypper module rather than running
'rpm'. If you need to use command because yum, dnf or zypper is insufficient
you can add 'warn: false' to this command task or set 'command_warnings=False'
in ansible.cfg to get rid of this message.
192.168.91.129 | FAILED | rc=1 >>
non-zero return code
[root@localhost project]# vim ansible.cfg
/ / 使用present下载安装包
[root@localhost project]# ansible all -m yum -a 'name=vsftpd state=present'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed: vsftpd-3.0.3-31.el8.x86_64"
]
}
/ / 查看下载是否成功
[root@localhost project]# ansible all -m shell -a 'rpm -qa|grep vsftpd'
192.168.91.129 | CHANGED | rc=0 >>
vsftpd-3.0.3-31.el8.x86_64
/ / 使用removed删除安装包
[root@localhost project]# ansible all -m yum -a 'name=vsftpd state=removed'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Removed: vsftpd-3.0.3-31.el8.x86_64"
]
}
/ / 查看删除情况
[root@localhost project]# ansible all -m shell -a 'rpm -qa|grep vsftpd'
192.168.91.129 | FAILED | rc=1 >>
non-zero return code
/ / 使用latest下载安装包
[root@localhost project]# ansible all -m yum -a 'name=vsftpd state=latest'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed: vsftpd-3.0.3-31.el8.x86_64"
]
}
/ / 查看下载情况
[root@localhost project]# ansible all -m shell -a 'rpm -qa|grep vsftpd'
192.168.91.129 | CHANGED | rc=0 >>
vsftpd-3.0.3-31.el8.x86_64
/ / 删除安装包
[root@localhost project]# ansible all -m yum -a 'name=vsftpd state=absent'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Removed: vsftpd-3.0.3-31.el8.x86_64"
]
}
/ / 查看删除情况
[root@localhost project]# ansible all -m shell -a 'rpm -qa|grep vsftpd'
192.168.91.129 | FAILED | rc=1 >>
non-zero return code
9. ansible常用模块之copy
copy模块用于复制文件至远程受控机。
[root@localhost ~]# ls /tmp/
ks-script-us_ovm41
vmware-root_1045-4257069366
vmware-root_1050-2957649121
vmware-root_1060-2957649088
[root@localhost project]# ls
ansible.cfg hehe inventories
[root@localhost project]# pwd
/opt/project
/ / 将inventories文件信息复制到受控主机的/tmp/inventories里面
[root@localhost project]# ansible all -m copy -a 'src=/opt/project/inventories dest=/tmp/inventories'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"checksum": "5dbc4f8cfe91de3d6567df21884c5d08148d8969",
"dest": "/tmp/inventories",
"gid": 0,
"group": "root",
"md5sum": "e166a18598e71a9571376f590a6e8832",
"mode": "0644",
"owner": "root",
"secontext": "unconfined_u:object_r:admin_home_t:s0",
"size": 29,
"src": "/root/.ansible/tmp/ansible-tmp-1626527874.179876-2868-198840126432948/source",
"state": "file",
"uid": 0
}
/ / 查看主机里面inventories文件信息
[root@localhost project]# cat inventories
[webservers]
192.168.91.129
/ / 查看被控机的inventories创建成功没有
[root@node1 ~]# cd /tmp/
[root@node1 tmp]# ls
inventories
ks-script-us_ovm41
vmware-root_1045-4257069366
vmware-root_1050-2957649121
vmware-root_1060-2957649088
/ / 查看其复制信息是否与主机信息一致
[root@node1 ~]# cat /tmp/inventories
[webservers]
192.168.91.129
10. ansible常用模块之group
group模块用于在受控机上添加或删除组。
/ / 在被控机里创建runtime用户组,gid设置为5000
[root@localhost project]# ansible all -m group -a 'name=runtime state=present gid=5000'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"gid": 5000,
"name": "runtime",
"state": "present",
"system": false
}
/ / 查看被控机创建结果
[root@node1 ~]# grep runtime /etc/group
runtime:x:5000:
/ / 删除被控机的runtime用户组
[root@localhost project]# ansible all -m group -a 'name=runtime state=absent gid=5000'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"name": "runtime",
"state": "absent"
}
/ / 删除成功
[root@node1 ~]# grep runtime /etc/group
[root@node1 ~]#
11. ansible常用模块之user
user模块用于管理受控机的用户帐号。
/ / 在被控机里创建普通用户test,设置uid为1020
[root@localhost project]# ansible all -m user -a 'name=test uid=1020 state=present'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 1020,
"home": "/home/test",
"name": "test",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1020
}
/ / 查看被控机test是否创建成功
[root@node1 ~]# id test
uid=1020(test) gid=1020(test) groups=1020(test)
/ / 在被控机中删除test用户
[root@localhost project]# ansible all -m user -a 'name=test uid=1020 state=absent'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"force": false,
"name": "test",
"remove": false,
"state": "absent"
}
/ / 查看被控机删除情况
[root@node1 ~]# id test
id: ‘test’: no such user
12. ansible常用模块之service
service模块用于管理受控机上的服务。
/ / 在被控机上面下载vsfpd包
[root@localhost project]# ansible all -m yum -a 'name=vsftpd state=present'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": "",
"rc": 0,
"results": [
"Installed: vsftpd-3.0.3-31.el8.x86_64"
]
}
/ / 下载成功
[root@node1 ~]# rpm -qa | grep vsftpd
vsftpd-3.0.3-31.el8.x86_64
/ / 在被控机开启vsftpd服务
[root@localhost project]# ansible all -m service -a 'name=vsftpd state=started'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"name": "vsftpd",
"state": "started",
"status": {
/ / 被控机vsftpd服务开启成功
[root@node1 ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disab>
Active: active (running) since Sun 2021-07-18 21:07:51 CST; 17s ago
Process: 2681 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0>
Main PID: 2682 (vsftpd)
Tasks: 1 (limit: 23789)
Memory: 556.0K
CGroup: /system.slice/vsftpd.service
└─2682 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Jul 18 21:07:51 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...
Jul 18 21:07:51 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
/ / 使被控机vsftpd服务现在关闭,开机自启动
[root@localhost project]# ansible all -m service -a 'name=vsftpd state=stopped enabled=yes'
192.168.91.129 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"enabled": true,
"name": "vsftpd",
"state": "stopped",
"status": {
/ / 被控机服务现在已关闭,且开机自启动
[root@node1 ~]# systemctl status vsftpd
● vsftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; enabled; vendor preset: disabl>
Active: inactive (dead) since Sun 2021-07-18 21:16:03 CST; 8s ago
Main PID: 2682 (code=killed, signal=TERM)
Jul 18 21:07:51 localhost.localdomain systemd[1]: Starting Vsftpd ftp daemon...
Jul 18 21:07:51 localhost.localdomain systemd[1]: Started Vsftpd ftp daemon.
Jul 18 21:16:03 localhost.localdomain systemd[1]: Stopping Vsftpd ftp daemon...
Jul 18 21:16:03 localhost.localdomain systemd[1]: Stopped Vsftpd ftp daemon.
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/5654.html