diff --git a/CHANGELOG.md b/CHANGELOG.md index b8df628..6a25c9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,5 @@ ## TODO -* 服务器文件对传 * 批量下发后台定时任务 * AI对话收藏 * 移动端Ctrl、Tab的按键面板 @@ -8,7 +7,19 @@ * 进程管理 * 当前会话连接|w * 日志打印优化 -* +* rdp +* 探针接入 + +## [3.4.0](https://github.com/chaos-zhu/easynode/releases) (2025-08-04) +* 🎉新增文件对传功能 +* SFTP面板支持手动断开重连 +* SFTP loading ui修复 +* 禁用MFA2添加验证 +* 支持openssh加密密钥 +* 点击Logo切换菜单位置 +* 换了个新Logo +* 合并通知配置tab + ## [3.3.0](https://github.com/chaos-zhu/easynode/releases) (2025-08-04) * 🎉新增终端连接代理服务 diff --git a/server/app/controller/plus.js b/server/app/controller/plus.js index 7b91626..6db878f 100644 --- a/server/app/controller/plus.js +++ b/server/app/controller/plus.js @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/server/app/controller/ssh.js b/server/app/controller/ssh.js index 19d648d..e29d95f 100644 --- a/server/app/controller/ssh.js +++ b/server/app/controller/ssh.js @@ -9,15 +9,16 @@ async function getSSHList({ res }) { let data = await credentialsDB.findAsync({}) data = data?.map(item => { const { name, authType, _id: id, date } = item - return { id, name, authType, privateKey: '', password: '', date } + return { id, name, authType, privateKey: '', password: '', openSSHKeyPassword: '', date } }) || [] data.sort((a, b) => b.date - a.date) res.success({ data }) } const addSSH = async ({ res, request }) => { - let { body: { name, authType, password, privateKey, tempKey } } = request + let { body: { name, authType, password, privateKey, openSSHKeyPassword, tempKey } } = request let record = { name, authType, password, privateKey } + if (openSSHKeyPassword) record.openSSHKeyPassword = openSSHKeyPassword if (!name || !record[authType]) return res.fail({ data: false, msg: '参数错误' }) let count = await credentialsDB.countAsync({ name }) if (count > 0) return res.fail({ data: false, msg: '已存在同名凭证' }) @@ -34,8 +35,9 @@ const addSSH = async ({ res, request }) => { } const updateSSH = async ({ res, request }) => { - let { body: { id, name, authType, password, privateKey, date, tempKey } } = request + let { body: { id, name, authType, password, privateKey, openSSHKeyPassword, date, tempKey } } = request let record = { name, authType, password, privateKey, date } + if (openSSHKeyPassword) record.openSSHKeyPassword = openSSHKeyPassword if (!id || !name) return res.fail({ data: false, msg: '请输入凭据名称' }) let oldRecord = await credentialsDB.findOneAsync({ _id: id }) if (!oldRecord) return res.fail({ data: false, msg: '凭证不存在' }) diff --git a/server/app/socket/plus.js b/server/app/socket/plus.js index 04f1ffc..ffd094a 100644 --- a/server/app/socket/plus.js +++ b/server/app/socket/plus.js @@ -1 +1 @@ -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 \ No newline at end of file +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 \ No newline at end of file diff --git a/server/app/socket/terminal.js b/server/app/socket/terminal.js index 32c90fd..a339141 100644 --- a/server/app/socket/terminal.js +++ b/server/app/socket/terminal.js @@ -22,6 +22,9 @@ async function getConnectionOptions(hostId) { const sshRecord = await credentialsDB.findOneAsync({ _id: credentialId }) authInfo.authType = sshRecord.authType authInfo[authInfo.authType] = await AESDecryptAsync(sshRecord[authInfo.authType]) + if (authInfo.authType === 'privateKey' && sshRecord.openSSHKeyPassword) { + authInfo.passphrase = sshRecord.openSSHKeyPassword + } } else { authInfo[authType] = await AESDecryptAsync(hostInfo[authType]) } diff --git a/server/app/utils/plus.js b/server/app/utils/plus.js index 067eb9a..c448f02 100644 --- a/server/app/utils/plus.js +++ b/server/app/utils/plus.js @@ -1 +1 @@ -U2FsdGVkX19cLtuM32n63Jkv0/ObLTjPu6qgg7GgYXu5azvBJiwxIKAZpdoIwwJyxqsRh5oggNeUZxVtLyQ2DPvBV8N+e4P9SCIZ4AwL0NoQzgwes1gjKAR6bfVxCJ1KjB2oSa+HQLtKc9grodpsF++KLNC8+D1ZQBWVQ7Florqr0Zn0Nq2v3tsO2wS22QEGnmtTQaGELMnBgNti1EuBk7XAcChOCIY3KSsELowIdcFyyAlouc/YJiholQELTc3R3li3GSlmOuFPTnnaLe/PBMxjbTApma2otVTl5ddNkKzMrMSyOhBprw1nOVK2k/sHhCcZtoVBp3iT/13Dv50W2YTAw8k9Tb52w1jcn+fDIcj1EBZNOCTUhJ7TJXgncFCvNuRWKwFrx3vHJWW3Qaep/PMRbv+UYfWnU56kXBldOMTeyvIK4GRrm109fSBAf3/Yrt1MquIkt6GLN5x3eF9p/CwSF5ObykkVa4A7mI10wRcY9Le/HyZbcbdkyICA8Y9+ZM9PAOP1rO7W268NJzc//y+tBH9Lh9X7beK6xR0soMkGsboAsGCSQGG8kLSlCtYSN2dWp2GqNrtgrMjqX2STri+/2PTdJ3rQFoABlIl24qLoZsgcsfiEm3MGnTcSCl2sbnJM0MSCdlTCrozmm9h7yFzrdKwxQamtzGd9UYzFzBUqGMmdXj0MxG0Wt8rGJ+ALM5NWJPV9JdXzsVGTMJcuUUole/ZUAnoeOyVPZGw9u2zve1G6DqxTlt7lTdqt+r7YQs8xVqKzNWhrs4JaHN8VC5vpCDAzPxukPfd7spfLqWn97llTP5zR/b4DiM5vwTuWgHgeXp4s3Ii2hgJW7yim8cWk7Q5phP1mvb0PorlSp+4= \ No newline at end of file +U2FsdGVkX1/ZvAPYoB/CtzeytYO1I2b3w9dMsJCC7Ij/bQSMkkrORQSfc2kzqp6ZOuRvrYaEj8/SoMyukViiB14z5DVhX+Pjfm8VjQ3sNtPfN/Kc8nxJkipB8bjWVuiK9VuTxxBVatGqQ+ESDF8Vzq1ygL3NTGz0QqnfMiY3NXecc/PGi/dP99feMPpL/5XmbqMhDz8FG/MlGhuXIjd+Zl2qkxhGgI2bgOwcyJBLCOuugaAVNUUSZIq4rrsJPgnj/kFf6rh1qgXkTMa3dE7XACoNyjnYPUCX0brIenKUqd7aehFKiRczudmzSjrPJXxb3txUbzjWJzhjW0FA0odNQCWog0Qvh+WXDc76QpMOD/Bq/yxmQvKwx8AniTTn8zhYUnwSWO+b4+H6v/kGcY9LSocQhbK7Ef5cfn7SRnTE5fKcjTrLnXQ2sc3j77VQFcJZ9lCQk0WgfZhtR37ZjzDeMkV/og9Kw4hJpluAFti+4cD2vpqF8c8rs45CtzqpIfc1evQPbxKH4kKtM0gWXrMuyQN3bIuLydsSFX95GZahg8PGdJkRngcHOKjjR/VMsAibdaGHuuQ3UlAqehWGJodSO81+ULVz5qt9VeSB1qZkdopy6GAuZsRbXibTbCv1E9CduFCiZQ8+eWpQexf83jieYevTEpQoS4L5DTxrYK7zavS+3qlECcpDbPiQ8Ji6AkmUokbe5Mnm9WSR+WaIY3gp1T0Of5f6GDvxce1HrM2ysWt5LjLd4sOACL8mVzbqXoMKaU5HC69CtaXsOee68GSr0P2V0glojMS2awRImA3BMUCGABn8SfVn45w1vf2jcwnITD4QrKTXeARuvs1vltvRXeoKyXa+HesQkgBidgIyIBk= \ No newline at end of file diff --git a/web/src/views/credentials/index.vue b/web/src/views/credentials/index.vue index 4dad6e9..e0649c3 100644 --- a/web/src/views/credentials/index.vue +++ b/web/src/views/credentials/index.vue @@ -67,6 +67,19 @@ placeholder="-----BEGIN RSA PRIVATE KEY-----" /> + + + + + { @@ -203,6 +217,7 @@ const handleClickUploadBtn = () => { const keyPasswordVisible = ref(false) const keyPassword = ref('') const tempPrivateKey = ref('') +const showOpenSSHKeyField = ref(false) const handleSelectPrivateKeyFile = (event) => { let file = event.target.files[0] @@ -213,6 +228,9 @@ const handleSelectPrivateKeyFile = (event) => { if (content.includes('ENCRYPTED')) { tempPrivateKey.value = content keyPasswordVisible.value = true + } else if (content.includes('OPENSSH PRIVATE KEY')) { + sshForm.privateKey = content + showOpenSSHKeyField.value = true } else { sshForm.privateKey = content }