任务计划/远程管理
一、计划任务
1、计划任务概念解析
在Linux操作系统中,除了用户即时执行的命令操作以外,还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务(如定期备份、定期采集监测数据)。RHEL6系统中默认已安装了at、cronie软件包,通过atd和crond这两个系统服务实现一次性、周期性计划任务的功能,并分别通过at、crontab命令进行计划任务设置。
2、计划任务分类
一次性计划任务
循环型计划任务
系统级计划任务
用户级计划任务
创建计划任务:用户级别的计划任务
3、Crontab详解
创建计划任务:用户级别的计划任务
[root@qfedu.com ~]# crontab -u 用户 -e
-u 指定用户 默认不写就是root
[root@qfedu.com~]# crontab -e
配置分两部分 拿空格分开
例 :*/1 * * * * /usr/bin/touch /tmp/1.txt (每分钟在usr/bin/touch文件下创建一个/tmp/1.txt文件)
第一部分:时间
分钟 小时 日 月 周
范围 0-59 0-23 1-31 1-12 0-7
上面的时间范围可以查看man手册: [root@qfedu.com ~]# man 5 crontab
各种时间写法:
5 10 ☆ ☆ ☆
5 10 8 ☆ ☆
1 5 7 ☆ 5
1,5,9 ☆ ☆ ☆ ☆
8-12 ☆ ☆ ☆ ☆
5-20,40 ☆ ☆ ☆ ☆
8-12,20-25 ☆ ☆ ☆ ☆
☆/5 ☆ ☆ ☆ ☆
ps: ☆ 表示每...
, 取不同的时间点
- 表示范围
*/5 每5分钟
第二部分:动作
把上面规定的时间要执行的命令写在这里,当然包括脚本(最常用),命令最好要写绝对路径
查看计划任务:两种方法
1)[root@qfedu.com ~]# crontab -l -u 用户名
查看某一个账户的计划任务
2)[root@qfedu.com ~]#cat /var/spool/cron/root
计划任务删除:两种方法
1)[root@qfedu.com ~]# crontab-r -u 用户名
-r 删除
[root@qfedu.com~]# crontab -e -u tom
2)[root@qfedu.com ~]# rm -f /var/spool/cron/root
二、远程管理
1、ssh服务
安装软件:
openssh-server 提供服务
openssh-clients 客户端
openssh
[root@qfedu.com ~]# yum install -y openssh*
ssh 端口22(SSH协议默认使用端口号22。当你尝试通过SSH连接到远程服务器时,你的SSH客户端会尝试连接到目标服务器的22号端口。)
服务器端:
启动服务:
[root@qfedu.com ~]# systemctl start sshd
查看:
[root@qfedu.com ~]# lsof -i:22
关闭防火墙和selinux:
systemctl stop firewalld
setenforce 0
客户端:
远程登陆管理:
[root@qfedu.com~]# ssh -x 用户名 @服务器端的ip地址 -p 22
(-x:禁用了X11转发,以确保不显示图形界面应用程序
-p 22: 这是SSH的选项之一,用于指定连接的端口号。)
[root@qfedu.com ~]# ssh 服务器端的ip地址
如登陆果账户没有密码,默认不能登录
无密码登陆(ssh密钥认证)
client(客户端):
产生公钥和私钥:
[root@qfedu.com~]#ssh-keygen //一路回车
拷贝公钥给对方:
[root@qfedu.com ~]# ssh-copy-id -i 服务器端的ip地址
直接执行远程命令:
[root@qfedu.com ~]# ssh 服务器端的ip地址 "reboot"
远程拷贝:
客户端ip:192.168.48.129 服务器端ip:192.168.48.130
[root@qfedu.com ~]# scp /tmp/1.txt 192.168.48.130:/tmp/ (将本机/tmp目录下的1.txt文件传给服务器端/tmp目录下)
[root@qfedu.com ~]# scp 192.168.48.130:/tmp/1.txt /tmp/ (将服务器端/tmp目录下的1.txt文件传到本机/tmp目录下)
拷贝目录加 -r 选项
修改端口号
[root@qfedu.com ~]# vim /etc/ssh/sshd_config Port 22
[root@qfedu.com ~]#systemctl restart sshd
2、rz sz命令
安装
root账号登陆后执行以下命令:
[root@qfedu.com~]#yum install -y lrzsz
使用
sz命令发送文件到本地:
[root@qfedu.com ~]#sz filename
rz命令本地上传文件到服务器:
[root@qfedu.com ~]# rz
执行该命令后,在弹出框中选择要上传的文件即可。
三、Jumpserver详解
1、环境配置
[root@sdp-dev ~]#setenforce 0
[root@sdp-dev ~]#systemctl stop firewalld.service
修改字符集,否则可能报input/outputerror的问题,因为日志里打印了中文
[root@sdp-dev ~]# localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 (定义新的区域设置(locale),它将系统的区域设置设置为"zh_CN.UTF-8",表示系统将使用简体中文并采用UTF-8字符编码。)
[root@sdp-dev~]#export LC_ALL=zh_CN.UTF-8 (LC_ALL是一个特殊的环境变量,它用于控制整个系统的区域设置,这里将其设置为简体中文。)
[root@sdp-dev~]#echo 'LANG="zh_CN.UTF-8" '>/etc/locale.conf (将区域设置的配置写入到/etc/locale.conf文件中,将系统的默认语言设置为"zh_CN.UTF-8",确保系统在启动时使用正确的语言设置。)
[root@sdp-dev ~]#yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
[root@sdp-dev ~]# wget https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz (使用wget工具从指定的URL下载Python 3.6.1的源代码压缩文件(Python-3.6.1.tar.xz),这是Python编程语言的特定版本。)
[root@sdp-dev ~]#tar xf Python-3.6.1.tar.xz && cd Python-3.6.1 (使用tar命令来解压缩下载的Python源代码文件。 cd Python-3.6.1:一旦解压完成,它将当前工作目录切换到Python源代码的目录,这是为了接下来的配置、编译和安装步骤。)
[root@sdp-dev python-3.6.1]# ./configure && make && make install
( ./configure:这个命令运行Python的配置脚本,它会检查系统环境并准备Python进行编译。它会生成Makefile,其中包含了编译Python所需的参数和选项。
make:一旦配置完成,这个命令会编译Python 3.6.1的源代码。它会将源代码转化为可执行的二进制文件。
make install:最后,这个命令会安装已编译的Python 3.6.1二进制文件和相关文件到系统中。这将使Python 3.6.1可用于系统的命令行和开发环境中。)
这里必须执行编译安装,否则在安装 Python 库依赖时会有麻烦.
[root@sdp-dev Python-3.6.1]#cd /opt
[root@sdp-dev opt]# python3 -m venv py3 (使用Python 3的venv模块创建了一个新的Python虚拟环境。)
[root@sdp-dev opt]# source /opt/py3/bin/activate (激活刚刚创建的Python虚拟环境。) (py3)
(py3)[root@sdp-dev opt]#git clone git://github.com/kennethreitz/autoenv.git (从GitHub上克隆名为autoenv的代码库。)
正克隆到‘autoenv'...
remote:Enumerating objects: 671, done.
remote: Total 671 (delta 0), reused 0 (delta 0), pack-reused 671
接收对象中:100%(671/671),103.92KiB1115.00 KiB/s, done.
处理 delta 中:100% (356/356), done.
(py3)[root@sdp-dev opt]#echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
(使用echo命令将文本字符串'source /opt/autoenv/activate.sh'追加到当前用户的
.bashrc文件中。.bashrc是一个Shell配置文件,它包含了在每次启动终端会话时自动执行的命令。)
(py3) [root@sdp-dev opt]#source ~/.bashrc
(立即应用对.bashrc文件的更改,而不需要重新登录或重新启动终端。)
2、下载Jumpserver
(py3) [root@sdp-dev opt]#git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master (从 GitHub 上克隆 "jumpserver" 存储库到本地,然后进入存储库目录,并将工作分支切换到 "master" 分支,以便在 "jumpserver" 存储库上进行开发或其他操作。)
正克隆到'jumpserver'
remote: Enumerating objects: 79, done.
remote: Counting objects: 100% (79/79), done.
remote: Compressing objects: 100% (68/68), done.
remote:Total 41282(delta 19),reused20 (delta5), pack-reused 41203接收对象中:100%(41282/41282),52.05 MiB179.00KiB/s, done.
处理 delta 中:100%(28176/28176),done. 已经位于‘master'
3、安装所需的python modules
(在Python中,模块(Modules)是一种组织Python代码的方式。模块的使用可以帮助你组织代码,提高代码的可重用性,并使得项目更易于管理。)
(py3) [root@sdp-dev jumpserver]# echo "source /opt/py3/bin/activate" > opt/jumpserver/.env
(这个命令的目的是将文本 "source /opt/py3/bin/activate" 写入名为 .env 的文件中,位于您的项目目录 opt/jumpserver/ 内。在这种上下文中,.env 文件通常用于设置环境变量或加载虚拟环境。source /opt/py3/bin/activate 的目的是激活名为 py3 的 Python 虚拟环境。)
(py3) [root@sdp-dev jumpserver]# cd requirements/
(py3)[root@sdp-dev requirements]#yum -y install $(cat rpm_requirements.txt)
($(cat rpm_requirements.txt) : 这部分命令从名为 rpm_requirements.txt 的文件中读取软件包名称,并将这些软件包一次性安装到系统中。cat 命令用于显示文件内容,然后 $(...) 语法将文件的内容传递给 yum 命令以安装软件包。-y 参数用于自动确认安装。)
(py3)[root@sdp-dev requirements]#pip install --upgrade pip
( 这个命令用于升级 pip,Python 包管理工具,以确保它是最新版本。)
(py3)[root@sdp-dev requirements]#pip install -r requirements.txt
(这个命令从名为 requirements.txt 的文件中读取 Python 包的列表,并使用 pip 安装这些包。通常,这是一个项目的依赖项清单,确保项目所需的所有 Python 包都被正确安装。)
4、安装Redis
(Redis(Remote Dictionary Server)是一个开源的高性能内存键值存储数据库系统,它的设计目标是提供一个快速、轻量级、灵活以及可扩展的数据存储解决方案。)
(py3)[root@sdp-devrequirements]# yum -y install redis
(py3)[root@sdp-dev requirements]# systemctl enable redis
(py3)[root@sdp-dev requirements]# systemctl start redis
5、安装MySQL
(MariaDB是一个MySQL分支因此在下面的命令中,mariadb 命令可以用于与MariaDB数据库交互。如果使用的是标准的MySQL数据库,应该使用 mysql 命令来进行交互。)
(py3)[root@sdp-dev requirements]# yum -y installmariadb mariadb-devel mariadb-
server
(py3)[root@sdp-dev requirements]# systemctl enable mariadb
(py3) [root@sdp-dev requirements]#systemctl start mariadb
(py3) [root@sdp-dev requirements]#mysql
( 这个命令用于启动MySQL命令行客户端,以便用户可以与MariaDB数据库交互。)
MariaDB[(none)]> create database jumpserver default charset 'utf8';
(这个命令用于在MariaDB中创建一个名为 jumpserver 的数据库。
default charset 'utf8' 指定了数据库的默认字符集为UTF-8,这是一种常见的字符集,支持多种语言和字符编码。 )
MariaDB [(none)]> grant all on jumpserver.* to 'jumpserveradmin'@'127.0.0.1'
(这个命令授予了用户 'jumpserveradmin' 对jumpserver数据库的所有权限。
'jumpserveradmin'@'127.0.0.1' 指定了授权的用户名和允许访问的主机。这表示
'jumpserveradmin' 用户只能从本地主机(127.0.0.1)访问数据库。)
MariaDB [(none)]>flush privileges;
(这个命令用于刷新MariaDB的权限表,以便最新的授权更改生效。)
MariaDB [(none)]> \q
(这个命令用于退出MariaDB命令行客户端。)
6、配置Jumpserver
(py3)[root@sdp-dev requirements]#cd ..
(py3)[root@sdp-dev jumpserver]#cp config_example.yml config.yml
(这个命令用于复制名为 config_example.yml 的配置文件到一个新的文件 config.yml。通常,config_example.yml 包含了一些示例配置,用户可以在config.yml 中进行自定义设置。)
(py3) [root@sdp-dev jumpserver]#SECRET_KEY=`cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 50`
(这个命令生成一个名为 SECRET_KEY的随机密钥,长度为50个字符。
/dev/urandom是一个Linux系统上的伪随机数生成器设备。
tr -dc A-Za-z0-9用于过滤并只保留字母和数字字符。
head -c 50用于截取前50个字符,生成一个50字符的密钥。)
(py3)[root@sdp-dev jumpserver]#echo SSECRET_KEY
vFjo4WEMRWNinxMconEXodf3VeEaRStkDzo6SpIfNxphYEEMUZ
(这个命令用于验证之前生成的 SECRET_KEY值)
(py3) [root@sdp-dev jumpserver]# echo "SECRET_KEY=$SECRET_KEY" >> ~/.bashrc
(这个命令将 SECRET_KEY 的值追加到当前用户的 ~/.bashrc 配置文件中,)
(py3) [root@sdp-dev jumpserver]#BOOTSTRAP_TOKEN='cat /dev/urandom | tr -dc A-Za-z0-9 | head -c 16`
(这个命令生成一个名为BOOTSTRAP_TOKEN的随机令牌,长度为16个字符。与生成 SECRET_KEY的方式类似。)
(py3) [root@sdp-dev jumpserver]#echo "BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN" >> ~/.bashrc
(这个命令将之前生成的 SECRET_KEY 的值追加到当前用户的 ~/.bashrc 配置文件中)
(py3) [root@sdp-dev jumpserver]# echo $BOOTSTRAP_TOKEN
yBCVQ9WHA9phTZ21
(这个命令用于验证之前生成的BOOTSTRAP_TOKEN的随机令牌)
下面这些命令主要用于配置文件/opt/jumpserver/config.yml的自动化配置和信息显示。
(py3)[root@sdp-dev jumpserver]# sed -i "s/SECRET_KEY:/SECRET_KEY: $SECRET_KEY/g” /opt/jumpserver/config.yml
(py3)[root@sdp-devjumpserver]#sed -i "s/BOOTSTRAP_TOKEN:/BOOTSTRAP_TOKEN: $BOOTSTRAP_TOKEN/g" /opt/jumpserver/config.yml
(py3)[root@sdp-dev jumpserver]# sed -i ''s/# DEBUG: true/DEBUG: false/g" /opt/jumpserver/config.yml
(py3)[root@sdp-dev jumpserver]# sed -i "s/# LOG_LEVEL: DEBUG/LOG_LEVEL: ERROR/g" /opt/jumpserver/config.yml
(py3)[root@sdp-dev jumpserver]# sed -i "s/# SESSION_EXPIRE_AT_BROWSER_CLOSE: false/SESSION_EXPIRE_AT_BROWSER_CLOSE: true/g" /opt/jumpserver/config.yml
(py3) [root@qfedu ~]# sed -i "s/DB_PASSWORD: /DB_PASSWORD: $DB_PASSWORD/g" /opt/jumpserver/config-yml
(py3)[root@sdp-devjumpserver]#echo -e "\033[31m 你的SECRET_KEY是SSECRET_KEY\033[0m"
你的SECRET_KEY是VFjo4WEMRwNinXMconEXodf3VeEaRStkDzo6SpIfNxphYEEMUZ
(py3) [root@sdp-dev jumpserver]#echo -e "\033[31m 你的BOOTSTRAP_TOKEN是$BOOTSTRAP_TOKEN \033[0m"
你的BOOTSTRAP_TOKEN是 yBCVQ9WHA9phTZ21
(py3)[root@sdp-dev jumpserver]# vi config.yml
DB_ENGINE:mysql
DB_HOST:127.0.0.1
DB_PORT:3306
DB_USER:jumpserveradmin
DB_PASSWORD: jumpserverpwd
DB_NAME:jumpserver
7、启动/关闭Jumpserver
(py3) [root@sdp-dev jumpserver]# ./jms start
(py3) [root@sdp-dev jumpserver]# ./jms stop
后台启动
(py3) [root@sdp-dev jumpserver]#./jmsstart -d
8、部署koko
Koko 是 JumpServer 连接字符协议的终端组件,支持 SSH、TELNET、MySQL、Redis 等协议。
支持终端管理,默认port为2222
[root@sdp-dev ~]# systemct1 start docker
[root@sdp-dev ~]#Server_IP=192.168.20.32
(将IP地址"192.168.20.32"分配给名为Server_IP的变量)
[root@sdp-dev~]# echo $BOOTSTRAP_TOKEN
(显示变量BOOTSTRAP_TOKEN的值。)
[root@sdp-dev~]# BOOTSTRAP_TOKEN=YBCVQ9WHA9phTZ21
(将Bootstrap Token设置为"YBCVQ9WHA9phTZ21")
[root@sdp-dev ~]# docker run --name jms_koko -d -p 2222:2222 -p 5000:5000 -e CORE_HOST=http://Server_IP:8080 -e BOOTSTRAP_TOKEN=SBOOTSTRAP_TOKEN jumpserver/jms_koko:1.5.5
(运行名为jms_koko的Docker容器,它将容器内部的端口2222和5000映射到主机的相应端口,并使用了之前设置的Server_IP和BOOTSTRAP_TOKEN作为环境变量。容器使用了名为jumpserver/jms_koko:1.5.5的镜像。)
9、部署guacamole
基于HTML5和JavaScript的VNC查看器
[root@sdp-dev ~]# docker run --name jms_guacamole -d -p 8081:8081 -e JUMPSERVER_SERVER=http://$Server_IP:8080 -e BOOTSTRAP_TOKEN=$BOOTSTRAP_TOKEN jumpserver/jms_guacamole:1.5.5
(运行一个名为 "jms_guacamole" 的 Docker 容器,映射了端口8081,并配置了两个环境变量,分别是 "JUMPSERVER_SERVER" 和 "BOOTSTRAP_TOKEN",以便容器能够与名为 "JUMPSERVER_SERVER" 的服务器进行通信,并使用 "BOOTSTRAP_TOKEN" 进行身份验证。)
10、部署luna
与nginx结合支持Web Terminal前端
[root@sdp-dev ~]#cd /opt/
[root@sdp-dev opt]# wget https://github.com/jumpserver/luna/releases/download/1.5.5/luna.tar.gz
[root@sdp-dev opt]# tar xf luna.tar.gz
[root@sdp-dev opt]# chown -R root:root luna
(用于更改 "luna" 目录的所有文件和子目录的所有者和组为 "root:root"。
-R 选项表示递归地更改所有文件和子目录的权限。)
11、配置nginx
[root@sdp-dev opt]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel
[root@sdp-dev opt]# rz
(使用rz命令上传nginx的源码包)
[root@sdp-dev opt]#tar xf nginx-1.14.2.tar.gz
[root@sdp-dev opt]#cd nginx-1.14.2
[root@sdp-dev opt]#./configure --prefix=/usr/local/nginx && make && make install
[root@sdp-dev opt]#cd /usr/local/nginx/conf/
[root@sdp-dev conf]#vim /usr/local/nginx/conf/nginx.conf
server [
listen 80;
client_max_body_size 100m; #录像和文件上传大小限制
#charset koi8-r;
#access_log logs/host.access.log main;
location /ui/ {
try_files $uri / /index.html;
alias /opt/lina/;
}
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
location /luna/ {
try_files $uri / /index.html;
alias /opt/luna/; #luna路径,如果修改安装目录,此处需要修改
}
location /media/ { #静态文件处理
add_header Content-Encoding gzip;
root /opt/jumpserver/data/; #录像位置,如果修改安装目录,此处需要修改
}
location /static/ {
root /opt/jumpserver/data/;
}
location /koko/ { #当我们请求koko,他会通过proxy_pass进行反向代理
proxy_pass http://localhost:5000;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /guacamole/{
proxy_pass http://localhost:8081/ ;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header upgrade $http_upgrade;
proxy_set_header Connection $http_connection;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log off;
}
location /ws/{
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8070;
proxy_http_version 1.1;
proxy_buffering off;
proxy_set_header upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location /api/{
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /core/ {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
rewrite ^/(.*)$ /ui/$1 last;
}
12、访问jumpserveer,进行验证
访问 http://自己的IP:80
会发现当我们访问80端口,他会自动进行跳转到lina提供给我们的更好的可视化界面