将gzip发送到另一台使用OnKeyboard与节点ssh交互的服务器
我正在使用node ssh(在firebase云函数中)在一台服务器上创建文件夹的存档,我想将此存档发送到另一台使用键盘交互身份验证的服务器,但我不知道如何管理它 我尝试的内容:将gzip发送到另一台使用OnKeyboard与节点ssh交互的服务器,ssh,Ssh,我正在使用node ssh(在firebase云函数中)在一台服务器上创建文件夹的存档,我想将此存档发送到另一台使用键盘交互身份验证的服务器,但我不知道如何管理它 我尝试的内容: 使用SSHscp这样的命令:scp-r my_backup.gzusername@server-2.com:/backups test/连接到第一台服务器时 =>但是我猜(并希望)第二台服务器需要它的密码来接受操作,我不知道如何像第一台服务器使用节点ssh(使用tryKeyboard和onKeyboardIntera
- 使用SSHscp这样的命令:
连接到第一台服务器时scp-r my_backup.gzusername@server-2.com:/backups test/
=>但是我猜(并希望)第二台服务器需要它的密码来接受操作,我不知道如何像第一台服务器使用节点ssh(使用tryKeyboard和onKeyboardInteractive)那样轻松地管理它 - 使用async/await首先连接到第一台服务器,然后将存档发送到第二台服务器,但第二台服务器连接的
中引用的所有内容都属于第二台服务器,因此我无法要求将存档从第一台服务器传输到第二台服务器then()
在实现与第二台服务器的连接之前:
var password = '***'
ssh.connect({
host: '***',
username: '***',
port: 22,
password,
tryKeyboard: true,
onKeyboardInteractive: (name, instructions, instructionsLang, prompts, finish) => {
if (prompts.length > 0 && prompts[0].prompt.toLowerCase().includes('password')) {
finish([password])
}
}
}).then((value) => {
await ssh.execCommand('touch my_backup.gz', {
cwd: '/home/directoryName'
}).then((result) => {
console.log('TOUCH OK');
if (result.stderr != '') console.log('TOUCH STDERR: ' + result.stderr);
}).catch((error) => {
ssh.dispose();
return response.status(401).send('error : ' + error);
});
await ssh.execCommand('tar --exclude=my_backup.gz -zcvf my_backup.gz .', {
cwd: '/home/directoryName'
}).then((result) => {
console.log('ARCHIVE CREATED !');
if (result.stderr != '') console.log('STDERR: ' + result.stderr);
}).catch((error) => {
ssh.dispose();
return response.status(401).send('error : ' + error);
});
ssh.dispose();
return response.status(200).send('ARCHIVE CREATED');
}).catch((error) => {
ssh.dispose();
return response.status(401).send('connection error : ' + error);
});
谢谢我最终通过wget使用FTP协议,简化了过程