【n8n教程】:SSH节点,实现远程服务器自动化管理

SSH(Secure Shell)是远程访问服务器的标准安全协议。在n8n中,SSH节点让您能够在工作流中执行远程命令、上传和下载文件,从而实现强大的服务器自动化管理能力。无论是定期检查服务器状态、批量部署应用,还是自动化日志清理,SSH节点都是您的得力助手。


为什么选择SSH节点?

在n8n中使用SSH节点有以下优势:


核心功能详解

1. 执行命令(Execute Command)

这是SSH节点最常用的功能。您可以在远程服务器上执行任何Shell命令。

常用场景:

2. 下载文件(Download File)

将远程服务器上的文件下载到n8n工作流中进行处理。

适用场景:

3. 上传文件(Upload File)

将文件从n8n上传到远程服务器。

适用场景:


快速开始

第一步:配置SSH凭证

在使用SSH节点前,需要先创建SSH凭证:

  1. 1. 打开n8n工作流编辑器
  2. 2. 添加SSH节点:在左侧节点面板搜索"SSH"
  3. 3. 点击"创建新凭证",选择身份验证方式

支持两种认证方式:

方式A - 密码认证(Password)

方式B - 私钥认证(Public Key) ⭐ 推荐

✅ 私钥认证为什么更好?

第二步:配置操作参数

以"执行命令"为例:

参数说明示例
凭证选择已创建的SSH凭证SSH连接
命令要执行的Shell命令df -h /
工作目录可选,命令执行的目录/home/user

实战案例:服务器健康检查工作流

现在让我们构建一个完整可执行的工作流,定时检查服务器健康状态。

工作流功能说明

该工作流每5分钟:

  1. 1. 自动连接到远程服务器
  2. 2. 执行系统命令获取磁盘、内存、运行时间
  3. 3. 处理和格式化输出结果
  4. 4. 保存数据供后续使用(可扩展为发送告警)

完整工作流JSON代码


    
    
    
  {
  "name"
: "SSH远程服务器检查",
  "nodes"
: [
    {

      "parameters"
: {
        "rule"
: [
          {

            "interval"
: ["minutes", 5]
          }

        ]

      }
,
      "id"
: "Cron",
      "name"
: "定时触发器",
      "type"
: "n8n-nodes-base.cron",
      "typeVersion"
: 1,
      "position"
: [250, 100]
    }
,
    {

      "parameters"
: {
        "authentication"
: "publicKey",
        "host"
: "your-server.com",
        "username"
: "ubuntu",
        "privateKey"
: "-----BEGIN OPENSSH PRIVATE KEY-----\nyour_private_key_content_here\n-----END OPENSSH PRIVATE KEY-----",
        "port"
: 22,
        "command"
: "df -h / && echo '---' && free -h && echo '---' && uptime"
      }
,
      "id"
: "SSH执行命令",
      "name"
: "SSH执行命令",
      "type"
: "n8n-nodes-base.ssh",
      "typeVersion"
: 1,
      "position"
: [500, 100]
    }
,
    {

      "parameters"
: {
        "assignments"
: {
          "assignments"
: [
            {

              "id"
: "a1",
              "name"
: "checkResult",
              "type"
: "object",
              "value"
: "{\n  \"timestamp\": $now.toISOString(),\n  \"diskStatus\": $json.stdout,\n  \"status\": \"success\",\n  \"server\": \"your-server.com\"\n}"
            }

          ]

        }

      }
,
      "id"
: "格式化数据",
      "name"
: "格式化数据",
      "type"
: "n8n-nodes-base.set",
      "typeVersion"
: 3,
      "position"
: [750, 100]
    }

  ]
,
  "connections"
: {
    "Cron"
: {
      "main"
: [
        [

          {

            "node"
: "SSH执行命令",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }
,
    "SSH执行命令"
: {
      "main"
: [
        [

          {

            "node"
: "格式化数据",
            "type"
: "main",
            "index"
: 0
          }

        ]

      ]

    }

  }
,
  "active"
: true,
  "settings"
: {}
}

如何导入和使用

  1. 1. 复制上面的JSON代码
  2. 2. 打开n8n工作流编辑器
  3. 3. 点击右上角菜单(...)→ 导入工作流
  4. 4. 选择从URL或直接粘贴JSON
  5. 5. 修改以下参数:
    • host:替换为您的服务器地址
    • username:替换为您的SSH用户名
    • privateKey:替换为您的实际私钥内容
  6. 6. 配置SSH凭证后保存并运行

常见命令示例

系统监控


    
    
    
  # 查看磁盘使用情况
df
 -h /

# 查看内存使用

free -h

# 查看CPU负载

uptime


# 查看运行进程

ps aux | grep nginx

# 综合检查

df
 -h / && free -h && uptime

服务管理


    
    
    
  # 重启Nginx
systemctl restart nginx

# 查看服务状态

systemctl status mysql

# 启动Docker容器

docker restart container_name

# 查看日志

tail
 -f /var/log/nginx/error.log

文件操作


    
    
    
  # 列出文件
ls
 -la /home/user/

# 文件大小统计

du
 -sh /var/www/

# 查找文件

find /home -name "*.log" -type f

# 文件权限修改

chmod
 755 /path/to/file

多命令执行


    
    
    
  # 使用 && 连接(前一个成功才执行下一个)
cd
 /app && npm install && npm start

# 使用 ; 连接(无论成否都执行下一个)

cd
 /app; ls; pwd

# 使用管道 |

cat
 /var/log/app.log | grep ERROR | wc -l

进阶技巧

1. 动态参数使用

在复杂工作流中,可能需要从前面节点获取动态参数:


    
    
    
  主机:$json.serverHost
用户名:$json.username
命令:df -h $json.path

2. 错误处理

添加"If"节点判断SSH命令是否成功:


    
    
    
  条件:$json.exitCode === 0
- 成功分支:继续处理数据
- 失败分支:发送告警通知

3. 多服务器管理

使用"Loop"或"Merge"节点连接多个SSH命令,依次或并行处理多台服务器。

4. 大文件处理

下载大文件时,可配合"Stream"节点处理,避免内存溢出。


常见问题排查

问题原因解决方案
连接超时网络不通或防火墙阻止检查防火墙规则,确认服务器地址正确
认证失败凭证错误验证用户名密码/私钥,确保格式正确
命令失败命令不存在或权限不足检查命令语法,或使用sudo提权
私钥格式错误PEM格式不对确保使用OpenSSH格式的私钥
编码问题输出乱码在命令前加 export LANG=en_US.UTF-8

安全最佳实践

推荐做法:

避免做法:


下一步建议

掌握了SSH节点基础后,您可以尝试:

  1. 1. 构建监控系统:定时检查多台服务器,异常时发送Slack/邮件告警
  2. 2. 自动化部署:配合Webhook节点,实现代码更新后自动部署
  3. 3. 日志收集:定期从服务器下载日志,集中分析和备份
  4. 4. 批量配置管理:统一更新多台服务器的配置文件
  5. 5. 备份自动化:定时执行服务器备份脚本,保障数据安全

引用链接

[1] 官方文档: https://docs.n8n.io/integrations/builtin/core-nodes/n8n-nodes-base.ssh/
[2] n8n系列教程: https://www.undsky.com/blog/?category=n8n%E6%95%99%E7%A8%8B#