添加简单密码混淆

This commit is contained in:
jukaifeng 2023-01-16 15:42:11 +08:00
parent 1953cde5c2
commit 8017b7a4e1
7 changed files with 6356 additions and 56 deletions

119
README.md
View File

@ -1,5 +1,3 @@
基于`bgwd666`的[deploy](https://github.com/bgwd666/deploy)发布脚本做了一些适合我自己的修改,在此万分感谢.
### 使用方法: ### 使用方法:
1. 下载项目 1. 下载项目
@ -15,52 +13,75 @@ npm install @dllcn/auto-deploy -D
3. 在项目根目录创建`deploy.config.js`文件: 3. 在项目根目录创建`deploy.config.js`文件:
```javascript ```javascript
module.exports = Object.freeze({ // 配置示例,具体配置看配置
development: {//测试 module.exports = Object.freeze({
SERVER_HOST: 'xxx', // ssh地址 服务器地址 development: {//ftp配置
USER: 'root', // ssh 用户名 SERVER_HOST: 'xxx', // 服务器地址
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏) USER: 'root', // 用户名
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa', PASSWORD: 'xxx', //密码,需加密,加密页面参考下面链接
PASSWORD: 'xxx', //方式二 用密码连接服务器 REMOTE_ROOT: '/web/test/', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
REMOTE_ROOT: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html LOCAL_PATH: "dist", // 需要上传文件夹路径,默认dist
LOCAL_PATH: 'dist', // 需要上传文件夹路径,默认dist PORT: 5521,
NAME: 'llcn', TYPE: "ftp", // ftp,sftp,ssh 模认ssh
PORT: 22 FTP_CONFIG:{
}, DELETE_REMOTE: true,
production: {//正式 ...
SERVER_HOST: 'xxx', }
USER: 'root', },
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏) production: {//ssh
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa', SERVER_HOST: 'xxx',
PASSWORD: 'xxx', USER: 'root',
REMOTE_ROOT: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html //方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
LOCAL_PATH: 'dist', // 需要上传文件夹路径,默认dist // PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
NAME: 'llcn', //方式二,密码
PORT: 22 PASSWORD: 'xxx',//密码,需加密,加密页面参考下面链接
} REMOTE_ROOT: '/var/local/llcn', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
}) LOCAL_PATH: 'dist/', // 需要上传文件夹路径,默认dist
PORT: 22,
/** SSH_CONFIG: {
* 必要配置 BACKUP: true,
*/ ...
// SERVER_HOST: 服务器地址 }
}
// LOCAL_PATH: 需要上传文件夹路径,默认dist })
// REMOTE_ROOT: 服务器路径 ```
// USER: 服务器用户名
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa' 用秘钥登录服务器(推荐)的秘钥地址, private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
// PASSWORD: 密码
// PORT: 端口
// LOADINGSTYLE: 进度动画,默认为 arrow4 加载动画 有 dots 至 dots12 如 dots6,line ,pipe , star, arrow 至 arrow4 等等 ### 配置
/**
* 扩展配置 #### 基础配置
*/ - **SERVER_HOST**: 服务器地址
// SSH_CONFIG.BACKUP: 是否备份,默认false - **USER**: 服务器用户名
// SSH_CONFIG.DELETE_LOCAL_PACKAGE: 成功后是否删除本地压缩包,默认false - **PASSWORD**: 密码
// SSH_CONFIG.BUILD_SHELL: 是否启动自动上传前编译,如果启用,填入编译命令 - **PRIVATE_KEY**: **[ssh推荐授权配置,与PASSWORD选用一样即可]**,用秘钥登录服务器(推荐)的秘钥地址, private 本机私钥文件地址(需要在服务器用户目录 一般是 `/root/.ssh/authorized_keys` 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
// SSH_CONFIG.EXTENDS: 任务结束后,有时有的操作需要其他命令支持,可以使用扩展,填入自己要用的命令数组.例如:['cd demo', 'rm -rf *'] - **LOCAL_PATH**: 需要上传文件夹路径,默认dist
- **REMOTE_ROOT**: 服务器路径
``` - **PORT**: 端口
- **LOADINGSTYLE**: **[非必须]**,进度动画,默认为 `arrow4` 加载动画 有 `dots``dots12``dots6`,`line` ,`pipe` ,`star`, `arrow``arrow4` 等等
- **TYPE**:**[非必须]**,上传方式,默认`ssh`,还可选择`ftp``sftp`
- **SSH_CONFIG**: **[非必须]**ssh模式下的扩展配置
- **FTP_CONFIG**:**[非必须]**ftp和sftp模式下的扩展配置
#### SSH_CONFIG
- **SSH_CONFIG.BACKUP**: 是否备份,默认false
- **SSH_CONFIG.DELETE_LOCAL_PACKAGE**: 成功后是否删除本地压缩包,默认false
- **SSH_CONFIG.BUILD_SHELL**: 是否启动自动上传前编译,如果启用,填入编译命令
- **SSH_CONFIG.EXTENDS**: 任务结束后,有时有的操作需要其他命令支持,可以使用扩展,填入自己要用的命令数组.例如:['cd demo', 'rm -rf *']
#### FTP_CONFIG
- **FTP_CONFIG.DELETE_REMOTE**: 如果为真,则在上传前删除目标上的所有现有文件
- **FTP_CONFIG.INCLUDE**: 默认["\*", "\*\\*\*"], 将上传除`.`开头文件以外的所有文件
- **FTP_CONFIG.EXCLUDE**: 模认排除sourcemaps和node_modules中的所有文件(包括`.`开头文件)
- **FTP_CONFIG.FORCEPASY**: 强制被动模式(未发送EPSV命令)
### 加密页面
[加密页面](./index.html)

View File

@ -14,6 +14,8 @@ const endLog = log => console.log(chalk.green(`--------------- ${log} ----------
const FtpDeploy = require('./ftp-deploy') const FtpDeploy = require('./ftp-deploy')
const ftpDeploy = new FtpDeploy(); const ftpDeploy = new FtpDeploy();
let AesConfig = require('../utils/Base')
let CryptoJS = require('../utils/crypto-js')
let config; // 用于保存 inquirer 命令行交互后选择正式|测试版的配置 let config; // 用于保存 inquirer 命令行交互后选择正式|测试版的配置
let pathHierarchy; //测试目录 let pathHierarchy; //测试目录
@ -25,7 +27,7 @@ const runFtpTask = async (cf, pt) => {
config = { config = {
user: cf.USER, user: cf.USER,
// Password optional, prompted if none given // Password optional, prompted if none given
password: cf.PASSWORD, password: decrypt(cf.PASSWORD),
host: cf.SERVER_HOST, host: cf.SERVER_HOST,
port: cf.PORT, port: cf.PORT,
localRoot: distDir, localRoot: distDir,
@ -38,7 +40,7 @@ const runFtpTask = async (cf, pt) => {
} }
cf.LOADINGSTYLE ? config['LOADINGSTYLE'] = cf.LOADINGSTYLE : ""; cf.LOADINGSTYLE ? config['LOADINGSTYLE'] = cf.LOADINGSTYLE : "";
console.log(chalk.yellow(`------------> 欢迎使用自动部署工具 <------------`)); console.log(chalk.yellow(`------------> 欢迎使用自动部署工具 <------------`));
const loading = ora(defaultLog('正在进行文件上传')).start() const loading = ora(defaultLog('正在进行文件上传')).start()
loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4'] loading.spinner = spinner_style[config.LOADINGSTYLE || 'arrow4']
@ -63,5 +65,19 @@ const runFtpTask = async (cf, pt) => {
} }
function decrypt(data) {
const key = CryptoJS.enc.Utf8.parse(AesConfig.AES_KEY);
const iv = CryptoJS.enc.Utf8.parse(AesConfig.AES_IV);
const decrypted = CryptoJS.AES.decrypt(data, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
// console.log(decrypted);
return CryptoJS.enc.Utf8.stringify(decrypted).toString();
}
module.exports = runFtpTask; module.exports = runFtpTask;

38
index.html Normal file
View File

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
<script src="./utils/Base.js"></script>
<script src="./utils/crypto-js.js"></script>
</head>
<body>
请输入明文:<input id="pass" />
<button onclick="jm()">加密</button>
<script type="text/javascript">
const key = CryptoJS.enc.Utf8.parse(AesConfig.AES_KEY);
const iv = CryptoJS.enc.Utf8.parse(AesConfig.AES_IV);
function jm() {
// debugger;
let mm = document.getElementById("pass").value;
if (!mm) {
return;
}
let encrypted = encrypt(mm);
alert(`您的密码为:${encrypted}`);
}
function encrypt(data) {
const srcs = CryptoJS.enc.Utf8.parse(data);
const encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
return encrypted.toString();
}
</script>
</body>
</html>

View File

@ -14,7 +14,8 @@ let config; // 用于保存 inquirer 命令行交互后选择正式|测试版的
let pathHierarchy; //测试目录 let pathHierarchy; //测试目录
let distZipPath; //打包后地址(smx-bundle.tar.gz是文件名,不需要更改, 主要在config中配置 REMOTE_ROOT 即可)//文件夹目录 let distZipPath; //打包后地址(smx-bundle.tar.gz是文件名,不需要更改, 主要在config中配置 REMOTE_ROOT 即可)//文件夹目录
let AesConfig = require('../utils/Base')
let CryptoJS = require('../utils/crypto-js')
//logs //logs
const defaultLog = log => console.log(chalk.blue(`---------------- ${log} ----------------`)); const defaultLog = log => console.log(chalk.blue(`---------------- ${log} ----------------`));
const errorLog = log => console.log(chalk.red(`---------------- ${log} ----------------`)); const errorLog = log => console.log(chalk.red(`---------------- ${log} ----------------`));
@ -271,7 +272,7 @@ const runUploadTask = async (cf, pt) => {
config = { config = {
SERVER_HOST: cf.SERVER_HOST, SERVER_HOST: cf.SERVER_HOST,
USER: cf.USER, USER: cf.USER,
PASSWORD: cf.PASSWORD, PASSWORD: decrypt(cf.PASSWORD),
REMOTE_ROOT: cf.REMOTE_ROOT.substring(0, index), REMOTE_ROOT: cf.REMOTE_ROOT.substring(0, index),
LOCAL_PATH: cf.LOCAL_PATH, LOCAL_PATH: cf.LOCAL_PATH,
OLD_NAME: cf.LOCAL_PATH.substring((l_index + 1), cf.LOCAL_PATH.length), OLD_NAME: cf.LOCAL_PATH.substring((l_index + 1), cf.LOCAL_PATH.length),
@ -324,4 +325,17 @@ const runUploadTask = async (cf, pt) => {
} }
function decrypt(data) {
const key = CryptoJS.enc.Utf8.parse(AesConfig.AES_KEY);
const iv = CryptoJS.enc.Utf8.parse(AesConfig.AES_IV);
const decrypted = CryptoJS.AES.decrypt(data, key, {
iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7,
});
// console.log(decrypted);
return CryptoJS.enc.Utf8.stringify(decrypted).toString();
}
module.exports = runUploadTask; module.exports = runUploadTask;

View File

@ -4,24 +4,28 @@ module.exports = Object.freeze({
USER: 'jukaifeng', // ssh 用户名 USER: 'jukaifeng', // ssh 用户名
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏) //方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa', // PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
PASSWORD: 'Www100530qq', //方式二 用密码连接服务器 PASSWORD: '9BfvGRhZ1PW2JHa+YJc9vg==', //方式二 用密码连接服务器
REMOTE_ROOT: '/web/test/', // 需要上传的服务器目录地址 如 /usr/local/nginx/html REMOTE_ROOT: '/web/test/', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
LOCAL_PATH: "dist", // 需要上传文件夹路径,默认dist LOCAL_PATH: "dist", // 需要上传文件夹路径,默认dist
PORT: 5521, PORT: 5521,
TYPE: "ftp", // ftp,sftp,ssh 模认ssh TYPE: "ftp", // ftp,sftp,ssh 模认ssh
FTP_CONFIG:{
DELETE_REMOTE: true,
}
}, },
production: {//正式 production: {//正式
SERVER_HOST: '172.17.13.31', SERVER_HOST: '172.17.13.31',
USER: 'root', USER: 'root',
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏) //方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa', // PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
PASSWORD: 'Sm@rtMapX!@#$%^', PASSWORD: 'PR84ODUE3d1w1pTkqmJRog==',
REMOTE_ROOT: '/var/local/llcn', // 需要上传的服务器目录地址 如 /usr/local/nginx/html REMOTE_ROOT: '/var/local/llcn', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
LOCAL_PATH: './dist/', // 需要上传文件夹路径,默认dist LOCAL_PATH: './dist/', // 需要上传文件夹路径,默认dist
PORT: 22, PORT: 22,
SSH_CONFIG: { SSH_CONFIG: {
BACKUP: true, BACKUP: true,
RENAME: "test2", // 没有 BUILD_SHELL: "npm run build",
DELETE_LOCAL_PACKAGE: true, DELETE_LOCAL_PACKAGE: true,
EXTENDS: ['cd /var/local', 'mkdir ex'] EXTENDS: ['cd /var/local', 'mkdir ex']
} }

16
utils/Base.js Normal file
View File

@ -0,0 +1,16 @@
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(factory);
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
root.AesConfig = factory();
}
})(this, function () {
const AesConfig = {
AES_KEY: '0123456789abcdef',
AES_IV: 'abcdef0123456789'
}
return AesConfig
});

6191
utils/crypto-js.js Normal file

File diff suppressed because it is too large Load Diff