添加简单密码混淆
This commit is contained in:
parent
1953cde5c2
commit
8017b7a4e1
105
README.md
105
README.md
|
@ -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({
|
module.exports = Object.freeze({
|
||||||
development: {//测试
|
development: {//ftp配置
|
||||||
SERVER_HOST: 'xxx', // ssh地址 服务器地址
|
SERVER_HOST: 'xxx', // 服务器地址
|
||||||
USER: 'root', // ssh 用户名
|
USER: 'root', // 用户名
|
||||||
//方式一 用秘钥登录服务器(推荐), private 本机私钥文件地址(需要在服务器用户目录 一般是 /root/.ssh/authorized_keys 配置公钥 并该文件权限为 600, (.ssh文件夹一般默认隐藏)
|
PASSWORD: 'xxx', //密码,需加密,加密页面参考下面链接
|
||||||
// PRIVATE_KEY: 'C:/Users/Html5/.ssh/id_rsa',
|
REMOTE_ROOT: '/web/test/', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
|
||||||
PASSWORD: 'xxx', //方式二 用密码连接服务器
|
LOCAL_PATH: "dist", // 需要上传文件夹路径,默认dist
|
||||||
REMOTE_ROOT: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
|
PORT: 5521,
|
||||||
LOCAL_PATH: 'dist', // 需要上传文件夹路径,默认dist
|
TYPE: "ftp", // ftp,sftp,ssh 模认ssh
|
||||||
NAME: 'llcn',
|
FTP_CONFIG:{
|
||||||
PORT: 22
|
DELETE_REMOTE: true,
|
||||||
|
...
|
||||||
|
}
|
||||||
},
|
},
|
||||||
production: {//正式
|
production: {//ssh
|
||||||
SERVER_HOST: 'xxx',
|
SERVER_HOST: 'xxx',
|
||||||
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: 'xxx',
|
//方式二,密码
|
||||||
REMOTE_ROOT: '/var/local', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
|
PASSWORD: 'xxx',//密码,需加密,加密页面参考下面链接
|
||||||
LOCAL_PATH: 'dist', // 需要上传文件夹路径,默认dist
|
REMOTE_ROOT: '/var/local/llcn', // 需要上传的服务器目录地址 如 /usr/local/nginx/html
|
||||||
NAME: 'llcn',
|
LOCAL_PATH: 'dist/', // 需要上传文件夹路径,默认dist
|
||||||
PORT: 22
|
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 等等
|
|
||||||
/**
|
|
||||||
* 扩展配置
|
|
||||||
*/
|
|
||||||
// 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)
|
||||||
|
|
18
ftp/index.js
18
ftp/index.js
|
@ -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,
|
||||||
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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>
|
|
@ -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;
|
|
@ -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']
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
});
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue