MySQL批处理备份脚本

ECHO OFF
COLOR 0A
CLS
REM ========================================
REM ====  2009-12-12  由 ClowLido 创建  ====
REM ====  2018-11-22  由 ClowLido 修改  ====
REM ========================================
REM 简介:
REM 本脚本可导出一个MySQL数据库中多个数据库实例,并在备份路径下记录日志。
REM 数据备份将被压缩,并打包成一个以“指定前缀_日期时间”命名的文件。
REM 打包成功后,用来压缩的数据备份将被自动删除以节约空间。
REM 可指定多个备份路径,自动删除备份路径下指定日期以前的过期文件。
REM 依赖文件:1.较新版本7-Zip压缩软件根目录下的7z.exe和7z.dll。
REM           2.对应版本MySQL数据库MySQL\bin下的mysqldump.exe。
REM 主要修改位置:本脚本偏上位置的====== 变量区域 ======
REM 可选修改位置:本脚本最末位置的==== 多地备份调用 ====
REM
REM 其他说明:
REM 请注意,在备份路径下,尽量不要防止其他文件。
REM 例如,最后修改时间在备份保留日期以前,且文件名开头与打包前缀相同的其他文件也可能被删除。
REM 修改某一备份文件的打包前缀部分,可避免被脚本自动删除。
REM 但是强烈建议将需要长期保存的备份文件复制到其他文件夹,以确保不会脚本错误删除。
REM 备份路径虽然支持带空格,但是不建议使用带空格的路径。
REM 多个数据库将被导出为独立的sql文件,格式为:数据名称_日期时间.sql,例如clowlido_20091212085111.sql。
REM 最后打包成一个压缩包,格式为:数据名称_日期时间.7z,例如clowlidocom_20091212085111.7z。
REM 建议将7z.exe、7z.dll、mysqldump.exe放在这个批处理所在目录下,
REM 否则请在下方变量区域为对应文件指定其所在目录。
REM 请注意,MySQL 8.0的mysqldump.exe用于旧版MySQL会报错
REM ===========================
SETLOCAL ENABLEDELAYEDEXPANSION
SET HOUR=%TIME:~0,2%
IF "%TIME:~0,1%"==" " SET HOUR=0%TIME:~1,1%
IF "%DATE:~2,1%"=="/" (
    REM 英文日期
    SET NOW=%DATE:~6,4%%DATE:~0,2%%DATE:~3,2%%HOUR%%TIME:~3,2%%TIME:~6,2%
    SET LOGNOW=%DATE:~6,4%-%DATE:~0,2%-%DATE:~3,2% %HOUR%:%TIME:~3,2%:%TIME:~6,2%
) ELSE (
    REM 中文日期
    SET NOW=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%%HOUR%%TIME:~3,2%%TIME:~6,2%
    SET LOGNOW=%DATE:~0,4%-%DATE:~5,2%-%DATE:~8,2% %HOUR%:%TIME:~3,2%:%TIME:~6,2%
)
REM ===========================
REM ====== 变量区域 开始 ======
REM 数据库服务器IP地址
SET "HOST=127.0.0.1"
REM
REM 数据库开放端口
SET "PORT=3306"
REM
REM 数据库备份用户名称(确保该用户有对应数据库的相应权限)
SET "USERNAME=clowlido"
REM
REM 数据库备份用户密码
SET "PASSWORD=clowlidocom"
REM
REM 要备份数据库的名称,如果有多个库请用空格分隔
REM 每个数据库导出独立的sql文件,格式为:数据名称_日期时间
REM 例如:clowlido_20091212085111.sql、database_20091212085111.sql
SET "DATABASENAME=clowlido database"
REM
REM mysqldump.exe所在路径(例如:D:\MySQL\bin,默认是当前批处理所在目录)
SET "MYSQL=%~dp0"
REM
REM 7z.exe、7z.dll所在路径(例如:D:\7-Zip,默认是当前批处理所在目录)
SET "ZIP=%~dp0"
REM
REM 数据备份文件的主要存放路径
REM 这个路径十分重要,必须正确配置
SET "DSTPATH=D:\backup"
REM
REM -- 多地备份路径 开始 --
REM 此为可选配置
REM 多地备份路径,数据备份文件的其他存放路径
REM 需要同时修改此文件最下方的“多地备份调用”区域
REM 与最下方“多地备份调用”的命令成对使用
REM 使用方法:修改下方DSTPATH后面的数字即可,数字不可重复,不够用可自行复制添加,使用前去掉下方命令最前面“::”
::SET "DSTPATH1=E:\backup"
::SET "DSTPATH2=F:\backup"
REM -- 多地备份路径 结束 --
REM
REM 打包前缀名称,数据备份压缩后文件的前缀名称
REM 在备份路径下,超过指定日期,与打包前缀相同的文件也可能会被删除
SET "DATNAME=clowlidocom"
REM
REM 备份保留天数
SET "SAVEDAY=60"
REM
REM 本次备份文件名,格式为:打包名称_日期时间 clowlidocom_20091212085111
SET "FILENAME=%DATNAME%_%NOW%"
REM
REM 日志文件名,日志保存在备份路径下,主要存放路径
SET "LOGFILE=dbbackup.log"
REM ====== 变量区域 结束 ======
REM ===========================
REM ====== 校验参数 开始 ======
IF NOT EXIST "%DSTPATH%" (
    ECHO %LOGNOW% 未能发现数据备份路径,尝试创建目录 %DSTPATH%
    ECHO %LOGNOW% 未能发现数据备份路径,尝试创建目录 %DSTPATH%>> "%DSTPATH%\%LOGFILE%"
    MD "%DSTPATH%" >NUL 2>NUL
    IF EXIST "%DSTPATH%" (
        ECHO %LOGNOW% 数据备份路径创建成功,数据备份目录 %DSTPATH%
        ECHO %LOGNOW% 数据备份路径创建成功,数据备份目录 %DSTPATH%>> "%DSTPATH%\%LOGFILE%"
    ) ELSE (
        ECHO %LOGNOW% 数据备份路径创建失败,建议检查变量 %DSTPATH%
        GOTO :EOF
    )
) 2>NUL
IF NOT EXIST "%MYSQL%\mysqldump.exe" (
    ECHO %LOGNOW% 依赖程序路径配置错误,建议检查变量 mysqldump.exe
    ECHO %LOGNOW% 依赖程序路径配置错误,建议检查变量 mysqldump.exe>> "%DSTPATH%\%LOGFILE%"
    GOTO :EOF
) 2>NUL
IF NOT EXIST "%ZIP%\7z.exe" (
    ECHO %LOGNOW% 依赖程序路径配置错误,建议检查变量 7z.exe
    ECHO %LOGNOW% 依赖程序路径配置错误,建议检查变量 7z.exe>> "%DSTPATH%\%LOGFILE%"
    GOTO :EOF
) 2>NUL
IF NOT EXIST "%ZIP%\7z.dll" (
    ECHO %LOGNOW% 依赖程序路径配置错误,建议检查变量 7z.dll
    ECHO %LOGNOW% 依赖程序路径配置错误,建议检查变量 7z.dll>> "%DSTPATH%\%LOGFILE%"
    GOTO :EOF
) 2>NUL
REM ====== 校验参数 结束 ======
REM ===========================
REM 备份数据库到主路径
FOR %%N IN (%DATABASENAME%) DO (
    CALL :DBBACKUP %%N
)
REM ===========================
REM ====== 打包备份 开始 ======
REM 打包数据备份到主路径
IF EXIST "%DSTPATH%\*%NOW%.sql" (
    "%ZIP%\7z.exe" a -aoa -sdel -t7z -mx=9 -mmt -slp "%DSTPATH%\%FILENAME%.7z" "%DSTPATH%\*%NOW%.sql">NUL 2>NUL
) ELSE (
    "%ZIP%\7z.exe" a -aoa -sdel -t7z -mx=9 -mmt -slp "%DSTPATH%\ERROR_%FILENAME%.7z" "%DSTPATH%\*%NOW%.err">NUL 2>NUL
    ECHO %LOGNOW% 备份失败!!!错误日志文件 %DSTPATH%\ERROR_%FILENAME%.7z
    ECHO %LOGNOW% 备份失败!!!错误日志文件 %DSTPATH%\ERROR_%FILENAME%.7z>> "%DSTPATH%\%LOGFILE%"
    GOTO :EOF
)
FOR /F "TOKENS=*" %%M IN ('FORFILES -P "%DSTPATH%" /M "%FILENAME%.7z" /C "CMD /C ECHO @fsize"^ 2^>NUL') DO (
    IF %%~M GTR 0 (
        ECHO %LOGNOW% 打包压缩数据备份成功,目标压缩文件 %DSTPATH%\%FILENAME%.7z
        ECHO %LOGNOW% 打包压缩数据备份成功,目标压缩文件 %DSTPATH%\%FILENAME%.7z>> "%DSTPATH%\%LOGFILE%"
    ) ELSE (
        ECHO %LOGNOW% 打包压缩数据备份失败,目标压缩文件 %DSTPATH%\%FILENAME%.7z
        ECHO %LOGNOW% 打包压缩数据备份失败,目标压缩文件 %DSTPATH%\%FILENAME%.7z>> "%DSTPATH%\%LOGFILE%"
        GOTO :EOF
    ) 2>NUL
)
REM ====== 打包备份 结束 ======
REM ===========================
CALL :EXPIRED "%DSTPATH%"
GOTO :MULTIDIR
:DBBACKUP
REM ===========================
REM ====== 备份数据 开始 ======
"%MYSQL%\mysqldump.exe" -h%HOST% -P%PORT% -u%USERNAME% -p%PASSWORD% --log-error="%DSTPATH%\%1_%NOW%.err" %1 > "%DSTPATH%\%1_%NOW%.sql"
FOR /F "TOKENS=*" %%B IN ('FORFILES -P "%DSTPATH%" /M "%1_%NOW%.err" /C "CMD /C ECHO @fsize"^ 2^>NUL') DO (
    IF %%~B GTR 0 (
        ECHO %LOGNOW% 生成数据备份文件失败,目标备份文件 %DSTPATH%\%1_%NOW%.sql
        ECHO %LOGNOW% 生成数据备份文件失败,目标备份文件 %DSTPATH%\%1_%NOW%.sql>> "%DSTPATH%\%LOGFILE%"
        DEL /A /F "%DSTPATH%\%1_%NOW%.sql" >NUL 2>NUL
        GOTO :EOF
    ) ELSE (
        ECHO %LOGNOW% 生成数据备份文件成功,目标备份文件 %DSTPATH%\%1_%NOW%.sql
        ECHO %LOGNOW% 生成数据备份文件成功,目标备份文件 %DSTPATH%\%1_%NOW%.sql>> "%DSTPATH%\%LOGFILE%"
        DEL /A /F "%DSTPATH%\%1_%NOW%.err" >NUL 2>NUL
    ) 2>NUL
)
REM ====== 备份数据 结束 ======
REM ===========================
GOTO :END
:MULTIBKUP
REM ===========================
REM ==== 多地备份数据 结束 ====
IF "%~1"=="" (
    ECHO %LOGNOW% 多地备份路径配置错误,建议检查修正
    ECHO %LOGNOW% 多地备份路径配置错误,建议检查修正>> "%DSTPATH%\%LOGFILE%"
    GOTO :END
)
IF NOT EXIST "%~1" (
    ECHO %LOGNOW% 未能发现多地备份路径,尝试创建目录 %~1
    ECHO %LOGNOW% 未能发现多地备份路径,尝试创建目录 %~1>> "%DSTPATH%\%LOGFILE%"
    MD "%~1" >NUL 2>NUL
    IF EXIST "%~1" (
        ECHO %LOGNOW% 多地备份路径创建成功,数据备份目录 %~1
        ECHO %LOGNOW% 多地备份路径创建成功,数据备份目录 %~1>> "%DSTPATH%\%LOGFILE%"
    ) ELSE (
        ECHO %LOGNOW% 多地备份路径创建失败,建议检查变量 %~1
        GOTO :EOF
    )
) 2>NUL
COPY /Y "%DSTPATH%\%FILENAME%.7z" "%~1\%FILENAME%.7z" >NUL 2>NUL
FOR /F "TOKENS=*" %%N IN ('FORFILES -P "%~1" /M "%FILENAME%.7z" /C "CMD /C ECHO @fsize"^ 2^>NUL') DO (
    IF %%~N GTR 0 (
        ECHO %LOGNOW% 生成多地备份文件成功,目标备份文件 %~1\%FILENAME%.7z
        ECHO %LOGNOW% 生成多地备份文件成功,目标备份文件 %~1\%FILENAME%.7z>> "%DSTPATH%\%LOGFILE%"
        ECHO %LOGNOW% 生成多地备份文件成功,目标备份文件 %~1\%FILENAME%.7z>> "%~1\%LOGFILE%"
    ) ELSE (
        ECHO %LOGNOW% 生成多地备份文件失败,目标备份文件 %~1\%FILENAME%.7z
        ECHO %LOGNOW% 生成多地备份文件失败,目标备份文件 %~1\%FILENAME%.7z>> "%DSTPATH%\%LOGFILE%"
        ECHO %LOGNOW% 生成多地备份文件失败,目标备份文件 %~1\%FILENAME%.7z>> "%1\%LOGFILE%"
        GOTO :END
    ) 2>NUL
)
REM ==== 多地备份数据 结束 ====
REM ===========================
CALL :EXPIRED "%~1"
GOTO :END
:EXPIRED
REM ===========================
REM ====== 过期清理 开始 ======
REM 删除保留天数以前的备份
FOR /F "TOKENS=*" %%I IN ('FORFILES /D -%SAVEDAY% -P "%~1" /M *.* /C "CMD /C IF @isdir==FALSE ECHO @file"^ 2^>NUL') DO (
    FOR /F "TOKENS=1 delims=_" %%D IN ("%%~I") DO (
        IF "%DATNAME%"=="%%~D" (
            IF "%~1"=="%DSTPATH%" (
                DEL /A /F "%~1\%%~I" >NUL 2>NUL && ECHO %LOGNOW% 删除过期数据备份成功,过期备份文件 %~1\%%~I && ECHO %LOGNOW% 删除过期数据备份成功,过期备份文件 %~1\%%~I>> "%DSTPATH%\%LOGFILE%"
            ) ELSE (
                DEL /A /F "%~1\%%~I" >NUL 2>NUL && ECHO %LOGNOW% 删除多地过期备份成功,过期备份文件 %~1\%%~I && ECHO %LOGNOW% 删除多地过期备份成功,过期备份文件 %~1\%%~I>> "%DSTPATH%\%LOGFILE%" && ECHO %LOGNOW% 删除多地过期备份成功,过期备份文件 %~1\%%~I>> "%~1\%LOGFILE%"
            )
        )
    )
)
REM ====== 过期清理 结束 ======
REM ===========================
GOTO :END
:MULTIDIR
REM ===========================
REM ==== 多地备份调用 开始 ====
REM 与“变量区域”中“多地备份路径”配套使用
REM 使用方法:修改下方DSTPATH后面的数字即可,数字不可重复,不够用可自行复制添加,使用前去掉下方命令最前面“::”
::CALL :MULTIBKUP "%DSTPATH1%"
::CALL :MULTIBKUP "%DSTPATH2%"
REM ==== 多地备份调用 结束 ====
REM ===========================
GOTO :EOF
:END

使用Windows子系统SSH远程Linux服务器

最近被PuTTY掉线掉烦了,决定另寻免费的SSH工具。于是乎想到了Windows 10组件“适用于Linux的Windows子系统”

【开始】-【Windows设置】-【应用】-【程序和功能】

(【控制面板】-【程序】-【程序和功能】)

【启用或关闭Windows功能】

【适用于Linux的Windows子系统】

之后在微软商城里搜索“Linux”,会看到好大的横幅广告,点击获取这些应用,看到Ubuntu、openSUSE、SUSE Linux,挑喜欢的安装即可。

远程连接

ssh clowlido.com -p 20001 -l clowlido -i openssh_key

传输文件

scp -P 20001 clowlido@clowlido.com:/home/clowlido/clowlido.txt /mnt/c/clowlido.txt
scp -P 20001 -i openssh_key /mnt/c/clowlido.txt clowlido@clowlido.com:/home/clowlido/clowlido.txt

传输文件夹

scp -P 20001 -r clowlido@clowlido.com:/home/clowlido/clowlidodir /mnt/c/clowlidodir
scp -P 20001 -i openssh_key -r /mnt/c/clowlidodir clowlido@clowlido.com:/home/clowlido/clowlidodir

使用DNS验证来更新Let’s Encrypt证书!

压着截止日期更新Let’s Encrypt证书,意外失败,之后HTTP验证怎么都无法通过。
去社区一看,有点懵逼,原来人家启用了Failed Validation limit失败验证限制,失败验证绑定IP、域名等。失败的验证一个小时后过期,需要在一个小时内继续验证,否则会被锁定,七天后才能重新验证,且无法解锁。
去翻文档,发现了DNS验证,这玩意简单,给TXT记录指定的字符串即可。

先在服务器上执行

certbot certonly --manual --preferred-challenges dns -d clowlido.com -d www.clowlido.com

按Y确认后。会生成一个域名_acme-challenge.clowlido.com,记录值XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX。
在DNS服务器或域名管理网站的域名解析设置里,新建一条TXT记录【_acme-challenge】,将指定的记录值【XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX】填入即可。

毕竟DNS不需要在服务器上新建文件,不需要搞权限,也不需要访问控制。
缺点是,这种手动更新不支持certbot renew。

附,更新Let’s Encrypt证书失败,导致各种错误。例如:
Attempting to renew cert (clowlido.com) from /etc/letsencrypt/renewal/clowlido.com.conf produced an unexpected error: Failed authorization procedure. clowlido.com (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching https://www.clowlido.com: Connection reset by peer, www.clowlido.com (http-01): urn:acme:error:connection :: The server could not connect to the client to verify the domain :: Fetching https://www.clowlido.com: Connection reset by peer. Skipping.
All renewal attempts failed. The following certs could not be renewed:
/etc/letsencrypt/live/clowlido.com/fullchain.pem (failure)

An unexpected error occurred:
There were too many requests of a given type :: Error creating new authz :: Too many invalid authorizations recently.

CentOS 7上nginx、php-fpm服务的创建

nginx、php-fpm的安装,我暂时先不写了,满大街的文章,不差我这一个。
创建服务很少有人提及,有人甚至因为不会建服务,用回CentOS 6。

CentOS 7的服务文件放在/usr/lib/systemd/system/下。
文件命名方式为 【服务名】.service

下面服务文件内容注意一下。
1.执行文件的路径也要修改。
2.pid文件所在文件夹记得修改权限。
3.User=clowlido和Group=clowlido,是运行主进程的用户,改成你自己的。
Windows时的习惯,我的所有应用系统的服务都是非root用户启动的。
如果想以root身份启动主进程,把这两个注释掉或移除。

友情提示:非root用户启动的服务,无法使用1024以下的端口,例如80、443。启动服务会报端口相关的错误。
我的解决方法是,在对应程序的conf文件里设置1024以上的端口,再用firewall把80、443转发到对应端口。

创建nginx服务

vi /usr/lib/systemd/system/nginx.service
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=network.target

[Service]
Type=forking
User=clowlido
Group=clowlido
PIDFile=/app/nginx/logs/nginx.pid
ExecStartPre=/app/nginx/nginx -t
ExecStart=/app/nginx/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

创建php-fpm服务

vi /usr/lib/systemd/system/php-fpm.service
[Unit]
Description=The PHP 7 FastCGI Process Manager
After=network.target

[Service]
Type=simple
User=www
Group=www
PIDFile=/app/php/var/run/php-fpm.pid
ExecStart=/app/php/sbin/php-fpm -F -c /app/php/etc/php.ini -y /app/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID

[Install]
WantedBy=multi-user.target

操作指令:

systemctl enable nginx

启用服务

systemctl disable nginx

禁用服务

systemctl daemon-reload

服务文件变动后,重载服务

systemctl start nginx

启动服务

systemctl stop nginx

结束服务

systemctl restart nginx

重新启动服务

systemctl status nginx

查看服务状态

systemctl status nginx -l

查看服务状态详细信息(多用这个吧)

CentOS 7 ssh远程登录停用密码认证,使用密钥认证

这休假和上班没什么区别啊,电话不断。
忙里偷闲,记录一下如何不用密码,用自己生成的密钥ssh登录服务器。

一、密钥生成
密钥分为公钥和私钥,公钥传到服务器上,私钥自己留着,私钥可以加密码。
但是,如果私钥加了密码,每次登陆时均需要输入密钥密码。
密钥类型建议从RSA、ECDSA、ED25519选择,长度256起步看需求。

以Xshell为例,上方菜单的工具,新建用户密钥生成向导。
全程都是中文提示,到“请输入给用户密钥加密的密码”,认证考虑要不要设置密码。
设置密码更安全,但是每次连接不输入服务器用户的密码,输入密钥的密码。
不设置的话,每次登录更方便,但是安全性就降低了。

新建密钥后,公钥、私钥的保存。可以Xshell菜单的工具,用户密钥管理者,进行管理。
公钥:选中密钥,右边的属性,公钥,保存为文件。
私钥:选中密钥,右边的导出。

二、ssh的配置更改

mkdir /home/clowlido/.ssh

在clowlido用户目录下新建一个.ssh文件夹

cd /home/clowlido/.ssh

进入.ssh文件夹

通过rz或xftp将公钥传到服务器上

mv ./clowlido.com.pub ./authorized_keys
chown clowlido:clowlido ./authorized_keys
chmod 600 ./authorized_keys

修改ssh设置,开放公钥认证

vi /etc/ssh/sshd_config
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys
ChallengeResponseAuthentication no
systemctl restart sshd

先测试一下,是否可以使用密钥登录。

测试通过后,禁用密码认证,以后就只用密钥登录了。

vi /etc/ssh/sshd_config
PasswordAuthentication no
systemctl restart sshd

CentOS 7创建新用户及ssh安全登录配置

一、新建一个用于ssh登录的用户

adduser clowlido

创建新用户clowlido。

passwd clowlido

为clowlido设置密码。

二、限制可以切换到root的用户
仅允许wheel组的用户切换到root。

vi /etc/pam.d/su
auth required pam_wheel.so use_uid

去掉上面这行前面的#。

vi /etc/login.defs
SU_WHEEL_ONLY yes

在文末添加这行。

gpasswd -a clowlido wheel

把新用户clowlido加入wheel组。

lid -g wheel

查询所有wheel组的用户。

到这里可以从root下,切换到clowlido,然后测试sudo和su -l是否正常。

su clowlido

切换到新建的clowlido用户

sudo ls

测试sudo是否有效,输入root密码后,如果执行了ls,为正常。

su -l

切换到root,输入root密码后,切换root的login shell,为正常。

三、配置ssh使用自定义端口
目标是要禁止root及其他用户远程登录,但是首先要确定使用新建的clowlido用户可以通过ssh登录。
如果你没测试就禁用了root,之后发现所有用户都无法登录,就太欢乐了。
VPS还好,有Console或VNC。实体机只能跑去机房本地操作。

断开现有ssh连接或新建连接,确认clowlido可以通过ssh登录。

su -l

登录后切换到root继续操作。

vi /etc/ssh/sshd_config

修改ssh协议版本和端口号。

Protocol 2

使用sshv2协议。

Port 20001

修改ssh端口为20001。

firewall-cmd --permanent --zone=public --add-port=20001/tcp

防火墙开放新ssh端口20001。

firewall-cmd --reload

防火墙重载,使配置生效。

systemctl restart sshd

重启sshd服务。

确认clowlido可以ssh新端口20001登录。登录后切换到root继续操作。

su -l

关闭原来ssh默认的22端口。

firewall-cmd --list-ports

查看是否开启了22端口。

firewall-cmd --permanent --remove-port=22/tcp

如果看到22的话,移除端口。

如果没有看到22的话,估计是开放的服务。

firewall-cmd --list-services

查看firewall开放的服务。
看到ssh的话,就确认是服务了。

vi /usr/lib/firewalld/services/ssh.xml

修改firewalld的ssh.xml。

<port protocol="tcp" port="20001"/>

将端口改为新端口20001。

firewall-cmd --permanent --zone=public --remove-port=20001/tcp

因为使用服务,所以把之前添加的端口移除。

firewall-cmd --reload

防火墙重载,使配置生效。

接下来对登录用户进行限制。

vi /etc/ssh/sshd_config

增加下面两条。

PermitRootLogin no

禁止root远程登录,VPS控制台或本地可以登录。

AllowUsers clowlido

放最后即可,仅允许clowlido用户登录。

systemctl restart sshd

重启sshD服务。
结束。