You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Node.js客户端库SSH连接Google Cloud虚拟机执行命令并写入文件

问题修复方案

1 基础配置排查修正

  • 首先替换代码中host字段的localhost为cloudvm实例的公网IP地址,可在GCP控制台虚拟机实例详情页直接获取
  • 确认GCP VPC防火墙已开放22端口的入站规则,允许你运行Node.js脚本的设备公网IP访问
  • 若使用密码认证:登录GCP虚拟机修改/etc/ssh/sshd_config文件,将PasswordAuthentication配置项改为yes,执行systemctl restart sshd重启SSH服务生效
  • 若使用私钥认证:将你本地SSH公钥内容追加到虚拟机对应用户的~/.ssh/authorized_keys文件中,同时设置文件权限为chmod 600 ~/.ssh/authorized_keys、文件夹权限为chmod 700 ~/.ssh

2 修正Node.js连接代码

推荐直接读取私钥内容传入,避免文件读取权限问题,完整示例代码如下:

const {NodeSSH} = require('node-ssh')
const fs = require('fs')

const ssh = new NodeSSH()

ssh.connect({
  host: '你的GCP虚拟机公网IP',
  username: '虚拟机对应的实际用户名',
  // 私钥认证配置
  privateKey: fs.readFileSync('/home/steel/.ssh/id_rsa', 'utf8'),
  // 若私钥设置了密码需补充以下字段
  // passphrase: '私钥密码'
  // 密码认证替换为以下字段即可
  // password: '虚拟机用户登录密码'
})
.then(() => ssh.execCommand('echo "this is fun" > a.txt'))
.then(res => {
  console.log('执行完成,输出:', res.stdout)
  ssh.dispose()
})
.catch(err => {
  console.error('操作失败:', err)
})

3 额外排查建议

  • 先使用系统原生SSH工具手动测试连接,确认认证配置有效:ssh 用户名@虚拟机公网IP -i 私钥路径,手动连接成功后再运行Node.js脚本
  • 确认私钥为OpenSSH格式,若为PuTTY生成的ppk格式需要导出为OpenSSH格式后使用
  • 不要使用测试值作为用户名,GCP虚拟机默认用户名和你实例创建时配置的账号或者GCP账号前缀保持一致

内容的提问来源于stack exchange,提问作者SHARON XAVIER

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:57:04