ubuntu 使用exec的私钥Node.js建立与远程SSH服务器的连接

qf9go6mv  于 2023-01-01  发布在  Node.js
关注(0)|答案(1)|浏览(139)

尝试连接到远程SSH服务器、Linux Ubuntu虚拟机并执行命令。
我觉得问这个问题很愚蠢,但我已经检查了几十个节点模块,没有找到解决方案。
我认为这是我这边的问题,因为我是一个编码新手,但我希望连接到虚拟机(运行在Linux,Ubuntu上),以便自动执行一些命令。截至目前,我通过PuTTY连接到服务器。我使用默认端口(22),填写IP地址和用户名,并上传我的密钥。在经历了一吨的SSH模块后,每一个都没有给我任何东西:没有错误,没有响应,什么都没有--除了,有时候,“所有配置的身份验证方法都失败了。”这让我认为我不正确地链接了我的密钥。我这样填写私钥路径:key:-或者不管选项名称是什么-require('fs').readFileSync('./keys/key.key')或者如果已经获取了fs,则仅为readFileSync('./keys/key.key')。如果选项只需要路径,则我已经填写了路径,并且我也尝试使用Buffer.from(),尽管我对它不是很熟悉。密钥默认为RSA格式,但我也使用ssh-keygen将其转换为OpenSSH,但没有效果。我尝试使用键盘交互,但主机不需要此功能,根本没有键盘交互提示。我尝试向密钥添加密码,但没有任何效果。我不知道该怎么办,我在网上也找不到答案。
谢谢大家!

yyyllmsg

yyyllmsg1#

经过几天的搜索,我终于找到了答案。原来,有一个关于主机真实性的提示,必须解决。我根本没有注意到这一点,因为我已经在我喜欢的SSH客户端上接受了它,它再也没有提示我-提示也有自己的宏伟的UI,所以我不知道它是固有的,但我更倾向于认为它是客户端本身的问题。我无法使用键盘交互修复这个问题,但我可以修改子进程方法execssh命令的选项。

const { exec } = require('child_process');

const command = 'ssh -tt -i ./keys/key.key -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@host command';
/* replace user, host, and command with desired options */
exec(command, (err, stdout, stderr) => {
  if (err) throw err;
  process.stdout.write(stdout);
});

这绕过了真实性提示,因为它欺骗系统,使系统相信它已经是一个已知主机。

相关问题