添加简单密码混淆

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. 下载项目
@ -15,52 +13,75 @@ npm install @dllcn/auto-deploy -D
3. 在项目根目录创建`deploy.config.js`文件:
```javascript
module.exports = Object.freeze({
development: {//测试
SERVER_HOST: 'xxx', // ssh地址 服务器地址
USER: 'root', // ssh 用户名
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
PASSWORD: 'xxx', //方式二 用密码连接服务器
REMOTE_ROOT: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
LOCAL_PATH: 'dist', // 需要上传文件夹路径,默认dist
NAME: 'llcn',
PORT: 22
},
production: {//正式
SERVER_HOST: 'xxx',
USER: 'root',
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
PASSWORD: 'xxx',
REMOTE_ROOT: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
LOCAL_PATH: 'dist', // 需要上传文件夹路径,默认dist
NAME: 'llcn',
PORT: 22
}
})
/**
* 必要配置
*/
// 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: 端口
// 配置示例,具体配置看配置
module.exports = Object.freeze({
development: {//ftp配置
SERVER_HOST: 'xxx', // 服务器地址
USER: 'root', // 用户名
PASSWORD: 'xxx', //密码,需加密,加密页面参考下面链接
REMOTE_ROOT: '/web/test/', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
LOCAL_PATH: "dist", // 需要上传文件夹路径,默认dist
PORT: 5521,
TYPE: "ftp", // ftp,sftp,ssh 模认ssh
FTP_CONFIG:{
DELETE_REMOTE: true,
...
}
},
production: {//ssh
SERVER_HOST: 'xxx',
USER: 'root',
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
//方式二,密码
PASSWORD: 'xxx',//密码,需加密,加密页面参考下面链接
REMOTE_ROOT: '/var/local/llcn', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
LOCAL_PATH: 'dist/', // 需要上传文件夹路径,默认dist
PORT: 22,
SSH_CONFIG: {
BACKUP: true,
...
}
}
})
```
// LOADINGSTYLE: 进度动画,默认为 arrow4 加载动画 有 dots 至 dots12 如 dots6,line ,pipe , star, arrow 至 arrow4 等等
/**
* 扩展配置
*/
// SSH_CONFIG.BACKUP: 是否备份,默认false
// SSH_CONFIG.DELETE_LOCAL_PACKAGE: 成功后是否删除本地压缩包,默认false
// SSH_CONFIG.BUILD_SHELL: 是否启动自动上传前编译,如果启用,填入编译命令
// SSH_CONFIG.EXTENDS: 任务结束后,有时有的操作需要其他命令支持,可以使用扩展,填入自己要用的命令数组.例如:['cd demo', 'rm -rf *']
```
### 配置
#### 基础配置
- **SERVER_HOST**: 服务器地址
- **USER**: 服务器用户名
- **PASSWORD**: 密码
- **PRIVATE_KEY**: **[ssh推荐授权配置,与PASSWORD选用一样即可]**,用秘钥登录服务器(推荐)的秘钥地址, private 本机私钥文件地址(需要在服务器用户目录 一般是 `/root/.ssh/authorized_keys` 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
- **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 = new FtpDeploy();
let AesConfig = require('../utils/Base')
let CryptoJS = require('../utils/crypto-js')
let config; // 用于保存 inquirer 命令行交互后选择正式|测试版的配置
let pathHierarchy; //测试目录
@ -25,7 +27,7 @@ const runFtpTask = async (cf, pt) => {
config = {
user: cf.USER,
// Password optional, prompted if none given
password: cf.PASSWORD,
password: decrypt(cf.PASSWORD),
host: cf.SERVER_HOST,
port: cf.PORT,
localRoot: distDir,
@ -38,7 +40,7 @@ const runFtpTask = async (cf, pt) => {
}
cf.LOADINGSTYLE ? config['LOADINGSTYLE'] = cf.LOADINGSTYLE : "";
console.log(chalk.yellow(`------------> 欢迎使用自动部署工具 <------------`));
const loading = ora(defaultLog('正在进行文件上传')).start()
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;

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 distZipPath; //打包后地址(smx-bundle.tar.gz是文件名,不需要更改, 主要在config中配置 REMOTE_ROOT 即可)//文件夹目录
let AesConfig = require('../utils/Base')
let CryptoJS = require('../utils/crypto-js')
//logs
const defaultLog = log => console.log(chalk.blue(`---------------- ${log} ----------------`));
const errorLog = log => console.log(chalk.red(`---------------- ${log} ----------------`));
@ -271,7 +272,7 @@ const runUploadTask = async (cf, pt) => {
config = {
SERVER_HOST: cf.SERVER_HOST,
USER: cf.USER,
PASSWORD: cf.PASSWORD,
PASSWORD: decrypt(cf.PASSWORD),
REMOTE_ROOT: cf.REMOTE_ROOT.substring(0, index),
LOCAL_PATH: cf.LOCAL_PATH,
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;

View File

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