ssh练习
根据要求完成部署
根据如下要求,完成部署过程
1.恢复7、8、9、31、41所有机器的快照
7 8 9 web服务 nginx
172.16.1.xx
nfs-31 提供共享文件存储
rsync-41 提供数据备份的机器
2.在61机器,远程一键脚本化,部署这5台机器
master-61机器远程的,操作目标机器,让它安装好对应的服务
web-7
1.安装软件
2.修改配置文件
3.启动服务
4.挂载nfs
根据服务相关性,需要有先后的部署关系
rsync-41
1.安装软件
2.修改配置文件
3.创建rsync对应的数据目录,配置文件,授权
4.启动服务
nfs-31 + lrsync实时同步
1.安装软件
2.修改配置文件
3.创建nfs相关的数据目录,授权
3.启动服务
4.安装lsync
5.修改lsync配置文件
6.启动服务
3.检查整体应用可用性
1.从nginx作为入口,nginx默认的网页根目录
/usr/share/nginx/html 写入数据
2.同步到nfs机器上
3.同步到rsync机器上
学习方法建议
1.理解部署架构
2.手敲部署过程,别复制粘贴,(1.复制粘贴可能会出现各种语法错误)
否则你永远搞不清其中每一个命令的语法,可能遇见的坑。
阶段1:手工部署
备份项目综合架构要求
把你要部署的1,2,3,45流程,捋清楚了,脚本自然也就出来了
完成需求思路
1.确认连接方式
2.连接后开始部署
Master-61建议登录的别名
alias sshweb7='ssh root@172.16.1.7 -p 22999'
alias sshweb8='ssh root@172.16.1.8 -p 22999'
alias sshweb9='ssh root@172.16.1.9 -p 22999'
alias sshnfs31='ssh root@172.16.1.31 -p 22999'
alias sshrsync41='ssh root@172.16.1.41 -p 22999'
写入/etc/profile
windows部分
让windows可以免密登录master-61机器
1. windows创建公私钥,默认会存放在什么路径下
~/.ssh/id_rsa
~/.ssh/id_rsa.pub
ssh-keygen 去哪执行
在windows中下载一个支持使用linux命令的工具
git-bash工具
yu@DESKTOP-1TDLFH9 MINGW64 ~/.ssh
$ ls
id_rsa id_rsa.pub
known_hosts(存放目标机器的指纹公钥,意义在于?当你下次连接该目标机器的时候,就无序再确认机器的指纹了)
生成公私钥对儿
ssh-keygen -t rsa
yu@DESKTOP-1TDLFH9 MINGW64 ~/.ssh
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/yu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/yu/.ssh/id_rsa
Your public key has been saved in /c/Users/yu/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:UIRiwabE0gzUJhD04WzJqA6AmXqNSntfFvxJa+QHKAk yu@DESKTOP-1TDLFH9
The key's randomart image is:
+---[RSA 3072]----+
|BO.o.. oo |
|o+@oB .. |
|=+oE .. |
|+ oo. o.. |
|+.o .o +S+ |
|+o. . * + |
|.o . o * . |
| . . o . . |
| . |
+----[SHA256]-----+
发送windows的公钥,给需要免密登录的机器上,目标机器 git-bash执行
ssh-copy-id (这个命令,等于把本地的公钥,写入到目标机器的~/.ssh/)
yu@DESKTOP-1TDLFH9 MINGW64 ~/.ssh
$ ssh-copy-id root@10.0.0.61
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/c/Users/yu/.ssh/id_rsa.pub"
The authenticity of host '10.0.0.61 (10.0.0.61)' can't be established.
ECDSA key fingerprint is SHA256:Csqwr63+SZRFFOug/IGoFTgRe8hDSI/QalSMBcC6IaU.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.0.61's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'root@10.0.0.61'"
and check to make sure that only the key(s) you wanted were added.
分别检查,客户端,服务端的,密钥文件信息
windows客户端的,目标机器的公钥
yu@DESKTOP-1TDLFH9 MINGW64 ~/.ssh
$ cat known_hosts
10.0.0.61 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBL/Sx3bAaNcKqo7pC4FTYk3gyZ6hd1D/DKUWVfOd4gZb/8XwlAxWauceHe/BAsW5Z8pEmG6AjSyHM8ckOs94c7Y=
linux服务端,可以看到windows机器的,公钥信息
[root@master-61 ~]#cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCyHEvexmoo7E/dkKjYg66uwo4i2q+dEdZ7nP+eTx4xmY6xUMohsK/LjE5ZuNN8GNPLD92fMGczX3Pz+tFkb4ujVb6yJkqVDVv5P48bZoC+10gYXAjX+mopa058iTKwkS9kcis5Geuomb7aReLnvnoP1q6qYe2rqhYQzLoB9xdjvrWeJ8ay/Z3ON4FR/a5Py2azPFPihIMKuTQasivHyq6BWImD44tLCgZaYrJRKLRge39aFAufxt2nIeeaZIsr55BZavAPzyLqpPez446geMZvEh1wgIZc0+ULSDy55gNXV9m12nBCVEHDUkn7IID9gw7zfMCq2s2eetPldDJnlVQpT2eFtn7nhCbkc0mxn+qCxEgSGQLDmUxnplN9kCBxsQfo5rT35guViMy1emw6dk26tX/sszyW9dFPYENNF0GfZBRw2Haj0zNNH5hoPrh+SLqY6d//fptHBrbgikVN474ewXmNeLThm0sl6BYrw/tUskV+CWW2+emNT49hcGPk4js= yu@DESKTOP-1TDLFH9
这个信息就和windows的 id_rsa.pub
yu@DESKTOP-1TDLFH9 MINGW64 ~/.ssh
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCyHEvexmoo7E/dkKjYg66uwo4i2q+dEdZ7nP+eTx4xmY6xUMohsK/LjE5ZuNN8GNPLD92fMGczX3Pz+tFkb4ujVb6yJkqVDVv5P48bZoC+10gYXAjX+mopa058iTKwkS9kcis5Geuomb7aReLnvnoP1q6qYe2rqhYQzLoB9xdjvrWeJ8ay/Z3ON4FR/a5Py2azPFPihIMKuTQasivHyq6BWImD44tLCgZaYrJRKLRge39aFAufxt2nIeeaZIsr55BZavAPzyLqpPez446geMZvEh1wgIZc0+ULSDy55gNXV9m12nBCVEHDUkn7IID9gw7zfMCq2s2eetPldDJnlVQpT2eFtn7nhCbkc0mxn+qCxEgSGQLDmUxnplN9kCBxsQfo5rT35guViMy1emw6dk26tX/sszyW9dFPYENNF0GfZBRw2Haj0zNNH5hoPrh+SLqY6d//fptHBrbgikVN474ewXmNeLThm0sl6BYrw/tUskV+CWW2+emNT49hcGPk4js= yu@DESKTOP-1TDLFH9
master-61管理机
1.修改ssh端口为22999
2.关闭用户名密码登录
3.开启通过公私钥登录
被管理机
1.修改ssh端口为22999
2.关闭用户名密码登录
3.开启通过公私钥登录
4.指定监听内网地址,172.16.1.xx
要求部署效果
1.master-61机器只能通过公私钥登录,禁止用户密码连接
2.所有主机的ssh端口全都是22999
3.被管理的机器只能通过内网、且使用公私钥连接。
阶段2:脚本部署ssh
阶段1的ssh环境部署,是手动操作;
现在需要实现脚本一键部署;
1.管理机自动创建公私钥
2.管理机自动分发公钥到备管理机
3.远程修改被管理机的ssh连接端口为22999,监听地址是172.16.1.xx
4.远程修改被管理机不允许密码登录,只能是密钥登录
5.修改完毕后,验证是否生效,远程查看所有被管理主机的主机名
参考写法
思路不唯一
可优化还很多
脚本是一个工艺品,不断打磨,不断完善
批量修改配置文件
友情提醒
客户端机器需要安装sshpass命令
这个sshpass命令只存在master-61机器上即可
实现了公钥面交互分发的命令如下
在master-61机器上执行
ssh-copy-id命令,分发公钥,但是默认需要输入远程机器的密码
使用 sshpass即可面交互输入密码
以及面指纹确认的参数 -o StrictHostKeyChecking=no
sshpass -p '123123' ssh-copy-id 172.16.1.${ip} -o StrictHostKeyChecking=no > /tmp/create_ssh.log 2>&1
客户端机器是否允许公钥登录
检查目标机器是否允许了公钥登录,一般情况下默认允许的
目标机器的sshd配置文件是初始化的
#1.管理机自动创建公私钥
echo "正在创建公私钥..."
if [ -f /root/.ssh/id_rsa ]
then
echo "密钥对已经存在,请检查!"
else
ssh-keygen -f /root/.ssh/id_rsa -N '' > /tmp/create_ssh.log 2>&1
fi
echo '====================分割线=============================='
#2.管理机自动分发公钥到备管理机
echo "正在分发公钥中...分发的机器列表是{7,8,31,41}"
for ip in {7,8,9,31,41}
do
sshpass -p '123123' ssh-copy-id 172.16.1.${ip} -o StrictHostKeyChecking=no > /tmp/create_ssh.log 2>&1
echo "正在验证免密登录结果中...."
echo "远程获取到主机名: $(ssh 172.16.1.${ip} hostname)"
done
echo '====================分割线=============================='
#3.远程修改被管理机的ssh连接端口为22999,监听地址是172.16.1.xx
for ip in {7,8,9,31,41}
do
echo "修改172.16.1.${ip}的ssh端口中..."
ssh root@172.16.1.${ip} "sed -i '/Port 22/c Port 22999' /etc/ssh/sshd_config"
done
echo '====================分割线=============================='
#4.远程修改被管理机不允许密码登录,只能是密钥登录
for ip in {7,8,9,31,41}
do
echo "禁止密码登录参数修改中...当前操作的机器是172.16.1.${ip}"
ssh root@172.16.1.${ip} "sed -i '/^PasswordAuthentication/c PasswordAuthentication no' /etc/ssh/sshd_config"
echo "允许公钥登录参数修改中...当前操作的机器是172.16.1.${ip}"
ssh root@172.16.1.${ip} "sed -i '/PubkeyAuthentication/c PubkeyAuthentication yes' /etc/ssh/sshd_config"
done
echo '====================分割线=============================='
# 5.修改监听内网地址
for ip in {7,8,9,31,41}
do
echo "修改监听地址中...当前操作的机器是172.16.1.${ip}"
ssh root@172.16.1.${ip} "sed -i '/ListenAddress 0.0.0.0/c ListenAddress 172.16.1.${ip}' /etc/ssh/sshd_config"
done
echo '====================分割线=============================='
# 6.批量验证ssh修改情况
for ip in {7,8,9,31,41}
do
echo "当前查看的机器是172.16.1.${ip}"
ssh root@172.16.1.${ip} "grep -E '^(Port|PasswordAuthentication|PubkeyAuthentication|ListenAddress)' /etc/ssh/sshd_config"
done
echo '====================脚本执行完毕=============================='
当前完成到了这个里
master-61可以免密操作
7 8 9 31 41这几个机器了
还缺少远程的批量重启sshd服务,让sshd_config配置生效
批量重启ssh服务验证结果
创建验证脚本如下
1.批量重启sshd服务
重启服务,单独拆分为了一个脚本,作用就是重启服务
for ip in {7,8,9,31,41}
do
echo "重启sshd服务中,当前操作的机器是172.16.1.${ip}"
ssh root@172.16.1.${ip} "systemctl restart sshd"
echo "==========================================="
done
重启完毕了服务,验证下修改的结果是否正确,远程查看配置文件信息
2.远程查看主机信息
这个脚本,作用就是远程查看主机的配置文件信息
[root@master-61 ~]#cat show_config.sh
for ip in {7,8,9,31,41}
do
echo "远程获取主机名中,当前操作的机器是172.16.1.${ip}"
ssh -p 22999 root@172.16.1.${ip} "hostname"
echo "远程获取主机sshd配置信息,当前操作的机器是172.16.1.${ip}"
ssh -p 22999 root@172.16.1.${ip} "grep -E '^(Port|PasswordAuthentication|PubkeyAuthentication|ListenAddress)' /etc/ssh/sshd_config"
echo "远程查看sshd端口情况,当前操作的机器是172.16.1.${ip}"
ssh -p 22999 root@172.16.1.${ip} "netstat -tunlp|grep sshd|grep -v grep"
echo "========================分割线============================="
done
此时还剩下master-61机器未修改了
web-7
web-8
web-9
nfs-31
rsync-41
全部完成了 sshd的配置文件修改,修改了
端口
监听地址
禁止密码登录
允许公钥登录
下一步就是该master-61机器的安全性,
禁止密码登录
允许公钥登录即可
此时,master-61,以及所有的目标机器以及全部配置好了ssh环境,可以进行服务安装 了
吧你以前部署操作,整理为一个健康的脚本,执行即可
阶段3:远程一键安装综合备份架构
上述的阶段2,一键搭建好了sshd的安全连接环境
只要编写一键安装服务的脚本即可
注意服务的启动顺序
rsync服务
根据刚才的画图理解流程,判断出先部署rsync服务
# 1.安装
yum install rsync -y
# 2.配置文件
cat > /etc/rsyncd.conf << 'EOF'
uid = www
gid = www
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = yuchaoit.cn about rsync
path = /backup
EOF
# 3.创建用户
groupadd www -g 666
useradd www -g 666 -u 666 -M -s /sbin/nologin
# 4.创建目录,授权
mkdir -p /backup
chown -R www.www /backup
# 5.创建密码文件,授权
echo 'rsync_backup:yuchao666' > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
# 6.启动服务
systemctl start rsyncd
systemctl enable rsyncd
# 7.检查服务
netstat -tunlp|grep rsync
远程拷贝、远程安装
[root@master-61 ~]#scp -P 22999 install_rsync.sh root@172.16.1.41:/opt/
[root@master-61 ~]#ssh -p 22999 root@172.16.1.41 "bash /opt/install_rsync.sh"
远程检查rsync部署操作
[root@master-61 /0224_scripts]#sshrsync41 "cat /etc/rsync.passwd;ls -ld /backup;id www"
rsync_backup:yuchao666
drwxr-xr-x 2 www www 6 Apr 28 10:39 /backup
uid=666(www) gid=666(www) groups=666(www)
nfs服务(nfs-31)
# 0. yum源阿里云yum配置
# 1.安装服务
yum install nfs-utils rpcbind -y
# 2.创建nfs限定的用户、组
groupadd www -g 666
useradd www -g 666 -u 666 -M -s /sbin/nologin
# 3.创建共享目录,修改权限
mkdir /nfs-yuchao-nginx
chown -R www.www /nfs-yuchao-nginx
# 4.创建配置文件
cat > /etc/exports <<EOF
/nfs-yuchao-nginx 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
EOF
# 5.启动服务
systemctl start nfs
# 6.检查服务
showmount -e 127.0.0.1
远程安装 1.远程发送配置文件
[root@master-61 ~]#scp -P 22999 install_nfs.sh root@172.16.1.31:/opt/
install_nfs.sh
2.远程执行
[root@master-61 ~]#ssh -p 22999 root@172.16.1.31 "bash /opt/install_nfs.sh"
nfs+lsyncd服务
# 1.安装服务
yum install lsyncd -y
# 2.生成配置文件
cat >/etc/lsyncd.conf <<EOF
settings {
logfile ="/var/log/lsyncd/lsyncd.log",
statusFile ="/var/log/lsyncd/lsyncd.status",
inotifyMode = "CloseWrite",
maxProcesses = 8,
}
sync {
default.rsync,
source = "/nfs-yuchao-nginx",
target = "rsync_backup@172.16.1.41::backup",
delete= true,
exclude = {".*"},
delay=1,
rsync = {
binary = "/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file="/etc/rsync.passwd",
_extra={"--bwlimit=200"}
}
}
EOF
# 3.创建密码文件
echo "yuchao666" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
# 4.启动
systemctl start lsyncd
# 5.检查服务
ps -ef|grep lsyncd |grep -v grep
远程安装lsyncd
1.远程发送配置文件
[root@master-61 ~]#scp -P 22999 install_lsyncd.sh root@172.16.1.31:/opt/install_lsyncd.sh
2.远程执行
[root@master-61 ~]#ssh -p 22999 root@172.16.1.31 "bash /opt/install_lsyncd.sh"
测试rsync+nfs
[root@master-61 ~]#ssh -p 22999 root@172.16.1.31 "touch /nfs-yuchao-nginx/超哥666.png"
[root@master-61 ~]#
[root@master-61 ~]#ssh -p 22999 root@172.16.1.41 "ls /backup"
超哥666.log
超哥666.png
Web7/8/9机器
# 1.安装服务
yum install nginx -y
# 2.创建配置文件
cat >/etc/nginx/nginx.conf <<EOF
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 4096;
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 81;
server_name localhost;
location / {
root html;
index index.html;
}
}
}
EOF
# 3.启动服务
systemctl start nginx
# 4.检查服务
netstat -tunlp|grep nginx
# 5.挂载目录
yum install nfs-utils -y
mount -t nfs 172.16.1.31:/nfs-yuchao-nginx /usr/share/nginx/html
远程部署
[root@master-61 ~]#scp -P 22999 install_nginx.sh root@172.16.1.7:/opt
[root@master-61 ~]#ssh -p 22999 root@172.16.1.7 "bash /opt/install_nginx.sh"
for server in {7,8,9}
do
scp -P 22999 install_nginx.sh root@172.16.1.${server}:/opt
ssh -p 22999 root@172.16.1.${server} "bash /opt/install_nginx.sh"
done
最终测试
1.在共享存储中,创建网页数据文件,提供给所有web机器使用
cat >index.html<<EOF
<meta charset=utf8>
心若在、梦就在。
于超老师带你学linux,加油吧少年。
EOF
scp -P 22999 index.html root@172.16.1.31:/nfs-yuchao-nginx/
2.检查数据备份情况
ssh -p 22999 root@172.16.1.41 "ls -l /backup"
3.检查网站情况
for web in {7,8,9}
do
curl 172.16.1.${web}:81
done
4. 浏览器访问
http://10.0.0.7:81/
http://10.0.0.8:81/
http://10.0.0.9:81/
5.再次修改页面,查看数据
cat >index.html<<EOF
<meta charset=utf8>
心若在、梦就在。 EOF
scp -P 22999 index.html root@172.16.1.31:/nfs-yuchao-nginx/
[root@master-61 ~]#ssh -p 22999 root@172.16.1.41 "cat /backup/index.html"
<meta charset=utf8>
心若在、梦就在。
ssh练习的更多相关文章
- [linux]阿里云主机的免登陆安全SSH配置与思考
公司服务器使用的第三方云端服务,即阿里云,而本地需要经常去登录到服务器做相应的配置工作,鉴于此,每次登录都要使用密码是比较烦躁的,本着极速思想,我们需要配置我们的免登陆. 一 理论概述 SSH介绍 S ...
- SSH实战 · 唯唯乐购项目(上)
前台需求分析 一:用户模块 注册 前台JS校验 使用AJAX完成对用户名(邮箱)的异步校验 后台Struts2校验 验证码 发送激活邮件 将用户信息存入到数据库 激活 点击激活邮件中的链接完成激活 根 ...
- 记录一则Linux SSH的互信配置过程
需求:四台Linux主机,IP地址为192.168.10.10/11/12/13,配置登录用户的互信 1.各节点ssh-keygen生成RSA密钥和公钥 ssh-keygen -q -t rsa -N ...
- SSH免手动输入密码和设置代理
通过使用sshpass将密码写入命令里,直接执行,免去手动密码输入的步骤命令如下: sshpass -p password_abc ssh user_abc@ssh_host -p ssh_port ...
- github免输用户名/密码SSH登录的配置
从github上获取的,自己整理了下,以备后用. Generating an SSH key mac windows SSH keys are a way to identify trusted co ...
- Linux 利用Google Authenticator实现ssh登录双因素认证
1.介绍 双因素认证:双因素身份认证就是通过你所知道再加上你所能拥有的这二个要素组合到一起才能发挥作用的身份认证系统.双因素认证是一种采用时间同步技术的系统,采用了基于时间.事件和密钥三变量而产生的一 ...
- mac下生成ssh keys 并上传github仓储
使用github仓储需要本机生成一个公钥key 添加到自己的git账户SSH keys中 mac 生成方法: 1. 打开终端 输入 ssh-keygen 然后系统提示输入文件保存位置等信息 ...
- Linux实战教学笔记05:远程SSH连接服务与基本排错(新手扫盲篇)
第五节 远程SSH连接服务与基本排错 标签(空格分隔):Linux实战教学笔记-陈思齐 第1章 远程连接LInux系统管理 1.1 为什么要远程连接Linux系统 在实际的工作场景中,虚拟机界面或物理 ...
- 树莓派3B的食用方法-1(装系统 网线ssh连接)
首先要有一个树莓派3B , 在某宝买就行, 这东西基本上找到假货都难,另外国产和英国也没什么差别,差不多哪个便宜买哪个就行. 不要买店家的套餐,一个是配的东西有些不需要,有的质量也不好. 提示:除了G ...
- linux启动SSH及开机自动启动
本文地址 分享提纲: 1.查看是否启动 2. 设置自动启动 1.[查看是否启动] 启动SSH服务 “/etc/init.d/sshd start”.然后用netstat -antulp | grep ...
随机推荐
- 力扣191(java)-位1的个数(简单)
题目: 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 '1' 的个数(也被称为汉明重量). 提示: 请注意,在某些语言(如 Java)中,没有无符号整数类型. ...
- OpenYurt 如何 “0 侵入” 攻破云边融合难点
简介: 随着 5G.IoT.直播.CDN 等行业和业务的发展,越来越多的算力和业务开始下沉到距离数据源或者终端用户更近的位置,以期获得很好的响应时间和成本,这是一种明显区别于传统中心模式的计算方式-- ...
- 项目版本管理的最佳实践:云效飞流Flow篇
简介: 飞流Flow的最佳实践(使用阿里云云效)为了更好地使用飞流Flow,接下来将结合阿里云云效来讲解飞流Flow的最佳实践 目录 一.分支规约 二.版本号规约 2.1 主版本号(首位版本号) 2. ...
- Cloudera Manager 术语和架构
简介: 本文介绍了Cloudera Manager 的常见术语和架构 Cloudera Manager 术语 为了有效地使用Cloudera Manager,您应该首先了解其术语. 术语之间的关系如 ...
- dotnet OpenXML 读取 PPT 主序列进入退出强调动画
本文告诉大家如何读取 PPT 文件里面,放在主动画序列 MainSequence 的进入和退出和强调的动画,和在 OpenXML 里面的存放方式 如以下的课件内容,给一个元素添加了进入强调退出的动画, ...
- ChatGPT 眼中的程序员
1 你如何看待程序员这个行业 程序员这个行业在现代社会扮演着非常重要的角色.作为一个技术驱动的职业,程序员们负责开发.设计和维护软件和应用程序,这些技术改变了我们的生活方式.商业模式和社会互动方式. ...
- vue使用bus.js在兄弟组件传值
A组件往B组件传递数据data 1.src下创建文件eventBus.js,内容: import Vue from 'vue' export default new Vue() 2.在A,B组件分别引 ...
- CF522D Closest Equals 离线扫描 + 线段树
CF522D Closest Equals 题意:m 个询问,求 [l,r] 内相同元素的最小距离. 离线询问,按右端点排序. 对于每一个 a[i],如果 last[a[i]] 存在,将线段树 las ...
- 【2023知乎爬虫】我用Python爬虫爬了2386条知乎评论!
目录 一.爬取目标 二.展示爬取结果 三.爬虫代码讲解 3.1 分析知乎页面 3.2 爬虫代码 四.同步视频 五.完整源码 您好,我是 @马哥python说,一枚10年程序猿. 一.爬取目标 前些天我 ...
- vuepress搭建
参考文章 中国 NPM 镜像 https://npmmirror.com/ 资料 链接:https://pan.baidu.com/s/1O1WitowUR4iwbrdsG92Gew 提取码:adj4 ...