gpt4 book ai didi

node.js - 在nodejs中使用ssh2实现scp功能

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:23 27 4
gpt4 key购买 nike

我想在nodejs中使用ssh2实现一个sshd服务器,它可以通过ssh访问,但不能通过scp访问,这是我的代码:

_clientConnectCb = (client)->
logger.info 'Client connected!'
_code = null
_user = null
_password = null
_hostPort = null
_clientShell = undefined;
client.on 'authentication', (ctx)->
if ctx.method is 'password'
_tmp = ctx.username.split('_')
_code = _tmp[0]
_user = _tmp[1]
if _tmp.length != 2
ctx.reject()
return

util.GetCodeInfo(_code, true, (err, info)->
if not err and not info.err and info
_hostPort = info.data
_password = ctx.password
logger.info 'user accept', _user, info
ctx.accept()
else
logger.warn err, info
ctx.reject()
)
else
ctx.reject(["password"])

client.on 'ready', ->
logger.info 'Client authenticated!'
rows = undefined;
cols = undefined;
width = undefined;
height = undefined;
term = undefined;
targetShell = undefined;
client.on 'session', (accept, reject)->
session = accept()
session.once("exec", (accept, reject, info)->
// when access by scp, 'exec' event will emit, but what to do next
console.log('Client wants to execute: ', info.command);
stream = accept();
client.on 'end', ->
logger.info 'Client disconnected'

client.on 'error', (err)->
logger.info 'client failed:', err
server = new Server {privateKey: fs.readFileSync(__dirname + "/ssh-rsa/#{config.rsaKey}")}, _clientConnectCb
server.listen config.port, '0.0.0.0', ->logger.info 'ssh proxy on port ' + @address().port

最佳答案

您已经拥有所请求命令的。您可以按照自己的意愿做出回应。

您可以使用 info.command 中的命令字符串调用 child_process.spawn(),然后在该子进程和 stream 之间进行管道传输。但是,您应该小心验证/保护 info.command 并确保它在他们登录的用户下执行,等等。

关于node.js - 在nodejs中使用ssh2实现scp功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31870701/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com