[工具] Shell 批量将本地的网站公私钥拷贝到远程服务器

介绍

基本信息

作者:朱明宇
名称:批量将本地的网站公私钥拷贝到远程服务器
作用:批量将本地的网站公私钥拷贝到远程服务器

使用方法

1. 在此脚本的分割线内写入相应的内容
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

1. sslpath=”/etc/letsencrypt/live/eternalcenter.com” #本地服务器存放网站公私钥的目录
2. sslfile1=”fullchain.pem” #本地服务器上的网站公钥的名称
3. sslfile2=”privkey.pem” #本地服务器上的网站私钥的名称
4. bip=”192.168.0.1″ #存放网站公私钥的远程服务器的 IP 地址,多个 IP 地址可以用空格分隔
5. buser=”mingyuzhu” #用于登录远程服务器的用户名
6. bcache=”/bcache” #远程服务器存放网站公私钥的目录

注意

1. 此脚本执行前必须要先保证执行本脚本的用户能无密码 ssh 远程这些远程服务器
2. 必须以 root 用户执行本脚本

脚本

#!/bin/bash

####################### Separator ########################

sslpath="/etc/letsencrypt/live/eternalcenter.com" #website cache
sslfile1="fullchain.pem"
sslfile2="privkey.pem"

bip="192.168.0.1"
buser="mingyuzhu"
bcache="/bcache"

####################### Separator ########################

######################## copy webiste date to remote server #########################

for i in `echo $bip`

do
ping -c4 -i0.8 -w4 $i &> /dev/null

if [ $? -eq 0 ];then
    ssh $buser@$i "who -b"
        if [ $? -eq 0 ];then
#            ssh $buser@$i "sudo mkdir $bcache ; sudo chown $buser:$buser $bcache"
            scp $sslpath/$sslfile1 $buser@$i:$bcache/ 
            scp $sslpath/$sslfile2 $buser@$i:$bcache/ 
        fi
fi
done

######################## copy webiste date to remote server #########################

[工具] Shell 还原本地网站文件和网站数据库备份到本地 LNMP

介绍

基本信息

作者:朱明宇
名称:将本地网站文件备份和网站数据库备份还原到本地 LNMP
作用:将本地网站文件备份和网站数据库备份还原到本地 LNMP

使用方法

1. 将网站的文件备份、网站的 SSL 公钥、网站的 SSL 私钥、网站的数据库备份,4 个文件放在此脚本中变量 tmppath 对应的目录里
2. 给此脚本添加执行权限
3. 执行此脚本

脚本分割线里的变量

tmppath=/bcache #本地存放网站的文件备份、网站的 SSL 公钥、网站的 SSL 私钥、网站的数据库备份的地方
midname=eternalcenter #网站的文件备份和网站的数据库备份的中间名
cmidname=fullchain #网站的 SSL 公钥的中间名
kmidname=privkey #网站的 SSL 私钥的中间名
webpath=/usr/share/nginx/html #网站文件在本地的正式存放位置
sslpath=/etc/nginx/ssl #网站网站的 SSL 公钥、网站的 SSL 私钥在本地的正式存放位置dbuser=ec #网站在数据库中的用户名
dbname=ec #网站在数据库中的的库名

注意

1. 本地需要已经搭建好 LNMP 平台
2. 必须以 root 的身份执行此脚本
3. 这里的网站的 SSL 公钥和网站的 SSL 私钥都是以 pem 后缀结尾,可以修改成真实对应的后缀
4. 脚本中类似 ”mysql -uroot -p’eternalcenter’ -e “drop database $dbname;”“ 中的 “eternalcenter“ 是指本地 MariaDB 数据库 root 用户的密码,需要修改成 MariaDB 数据库的 root 用户的真实密码

脚本

#!/bin/bash

####################### Separator ########################


tmppath=/bcache
midname=eternalcenter
cmidname=fullchain
kmidname=privkey

webpath=/usr/share/nginx/html
sslpath=/etc/nginx/ssl

dbuser=ec
dbname=ec


####################### Separator ########################

nowdirectory=`pwd`

#sudo systemctl stop nginx
#sudo systemctl stop php-fpm

cd $tmppath

sqlfile=`ls | grep $midname | grep -E \.sql$ | tail -1`
tarfile=`ls | grep $midname | grep -E \.tar | tail -1`
crtfile=`ls | grep $cmidname | grep -E \.pem$ | tail -1`
keyfile=`ls | grep $kmidname | grep -E \.pem$ | tail -1`


#sleep 300

echo $sqlfile
if [ -n "$sqlfile" ];then
    mysql -uroot -p'eternalcenter' -e "drop database $dbname;"
    mysql -uroot -p'eternalcenter' -e "create database $dbname;"
    mysql -uroot -p'eternalcenter' -e "grant all privileges on $dbuser.* to \"$dbuser\"@\"localhost\";"
    mysql -uroot -p'eternalcenter' $dbname < $sqlfile
    rm -rf $sqlfile
fi

echo $tarfile
if [ -n "$tarfile" ];then
    rm -rf $webpath/*
    tar -zxvf $tarfile -C $webpath/ &> /dev/null
    rm -rf $tarfile
    chcon -t httpd_sys_content_t -R $webpath/*
    chown -R php-fpm:php-fpm $webpath/
fi

echo $crtfile
if [ -n "$crtfile" ];then
    rm -rf $sslpath/$crtfile
    mkdir -p $sslpath &> /dev/null
    mv $crtfile $sslpath/
    chcon -t httpd_config_t $sslpath/*
fi

echo $keyfile
if [ -n "$keyfile" ];then
    rm -rf $sslpath/$keyfile
    mkdir -p $sslpath &> /dev/null
    mv $keyfile $sslpath/
    chcon -t httpd_config_t $sslpath/*
fi

chcon -t httpd_config_t $sslpath

sudo systemctl restart nginx
sudo systemctl restart php-fpm

cd $nowdirectory

[命令] Linux 命令 base64 (将多行内容变成 1 行代码以方便在 1 行命令中使用)

内容一:base64 命令直接使用的案例

1.1 将多行内容变成 1 行代码

1.1.1 创建多行内容
$ cat test.txt
line1: Eternal Center
line2: Mingyu Zhu

(
补充:这里以创建名为 test.txt 包含以下内容的文件为例

line1: Eternal Center
line2: Mingyu Zhu

)

1.1.2 将多行内容转换成 1 行代码
$ cat test.txt | base64 -w0
bGluZTE6IEV0ZXJuYWwgQ2VudGVyCmxpbmUyOiBNaW5neXUgWmh1Cg==

(补充:这里以将 test.txt 里的内容转换为 1 行代码为例)

1.2 将 1 行内容还原成多行代码

$ echo bGluZTE6IEV0ZXJuYWwgQ2VudGVyCmxpbmUyOiBNaW5neXUgWmh1Cg== | base64 -d
line1: Eternal Center
line2: Mingyu Zhu

(补充:这里以将 1 行以下代码还原成多行内容为例

bGluZTE6IEV0ZXJuYWwgQ2VudGVyCmxpbmUyOiBNaW5neXUgWmh1Cg==

)

内容二:base64 命令在脚本中使用的案例

# cat base64.sh

#!/bin/bash
myname=Eternal Ceneter
myurl=eternalcenter.com

YAML_CONTENT=$(cat << EOF
Kind: record
Metadata:
name: $myname
url: $myurl
EOF)

BASE64_YAML=$(echo "$YAML_CONTENT" | base64 -w0)
echo "echo '$BASE64_YAML'" | base64 -d | cat

(注意:这个脚本最后的 cat 命令可以换成任意其他命令,让人只用输入 1 行就可以让此命令处理几行内容的输入)

[内容] 常用的 Perl 兼容正则表达式 (PCRE)

1) \b 匹配单词边界处的空格字符,使用案例:# echo “ mingyuzhu ” | grep -P “\bmingyuzhu\b”
2) \B 匹配单词边界处的非空格字符,使用案例:# echo “mingyuzhu” | grep -P “\Bingyuzh\B”
3) \K 不要将 \K 左边的内容放进 $& (匹配的内容),也就是不会对 \K 左边的内容进行匹配
4) \A 匹配行首,使用案例:# echo mingyuzhu | grep -P “\Am”
5) \z 匹配行尾,使用案例:# echo mingyuzhu | grep -P “u\z”
6) \Z 匹配行尾或者匹配行尾换行符前面,使用案例:# echo mingyuzhu | grep -P “u\Z”
7) \G 全局匹配成功,位移指针自然会后移。全局匹配失败,位移指针会重置。如果匹配失败同时加上 \c 修饰符那位移指针不会变化

$txt = "123eternalcenter456";
$txt =~ /\G\d\d\d/gc; 
print "matched $&: ",pos $txt,"\n";

matched 123: 3

(
补充:
1) $& 代表匹配的内容
2) $` 代表匹配的内容前面的内容
3) $’ 代表匹配的内容后面的内容
)

8) 结尾处的 \g 全局匹配,当要匹配的内容出现时不会停下而是继续匹配下去,直到检查完全文。且每次匹配成功后都会记下指定位,每次记下的指定位在匹配的字符的左边,下次再匹配时就会从这个指定位开始匹配。每次的匹配位置可以通过 pos() 函数获取,如果匹配失败位移指针则会重置,pos 将返回 undef。如果和 \c 修饰符组合成 \gc, 匹配失败则不重置位移指针而是将位移指针向后移动 1 位,直到移动到最后 1 位。一般在匹配位置的最后面,案例:

$txt = "123eternalcenter456";
$txt =~ /\d\d\d/g; 
print "matched $&: ",pos $txt,"\n";

matched 123: 3

(
补充:
1) $& 代表匹配的内容
2) $` 代表匹配的内容前面的内容
3) $’ 代表匹配的内容后面的内容
)

9) \w 匹配单词,等价于 [[:alnum:]] 10) \W 匹配非单词,等价于 [^[:alnum:]]
11) \s 匹配空格字符,等价于 [[:space:]]
12) \S 匹配非空格字符,等价于 [^[:space:]]
13) \d 匹配数字,等价于 [0-9]
14) \D 匹配非数字,等价于 [^0-9]
15) \n 匹配换行
16) \N 不匹配换行,等价于 [^\n]

[内容] 正则表达式介绍

内容一:基础正则表达式 (BRE)

1.1 简介

Linux 基础的正则表达式

1.2 特点

?、*、(、)、{、} 等元字符前面必须添加转义符号 \ (斜杠)才能起作用,否则将被视为普通的字符

1.3 使用案例

1) 通过 grep 命令使用
2) 通过 sed 命令使用

内容二:扩展正则表达式 (ERE)

2.1 简介

在 Linux 基础正则表达式 (BRE) 上有所扩展

2.2 特点

?、*、(、)、{、} 等元字符前面不用添加转义符号 \ (斜杠)就能起作用

2.3 使用案例

1) 通过 egrep 命令使用
2) 通过 grep 命令加 -E 参数 (grep -E) 使用
3) 通过 sed 命令加 -E 参数(sed -E)
4) 通过 sed 命令加 -r 参数 (sed -r) 使用

内容三:Perl 兼容正则表达式 (PCRE)

3.1 简介

在 Linux 扩展正则表达式 (ERE) 上又有所扩展,并加入了 Perl 语言的一些特性

3.2 特点

支持 lookahead 断言、lookbehind 断言、递归模式、命名捕获组等高级功能

3.3 使用案例

通过 grep 命令加 -P 参数 (grep -P) 使用