SSH(Secure Shell)是远程访问服务器的标准安全协议。在n8n中,SSH节点让您能够在工作流中执行远程命令、上传和下载文件,从而实现强大的服务器自动化管理能力。无论是定期检查服务器状态、批量部署应用,还是自动化日志清理,SSH节点都是您的得力助手。
在n8n中使用SSH节点有以下优势:
这是SSH节点最常用的功能。您可以在远程服务器上执行任何Shell命令。
常用场景:
df -h /free -hps aux | grep nginxsystemctl restart nginxbash /path/to/script.sh将远程服务器上的文件下载到n8n工作流中进行处理。
适用场景:
将文件从n8n上传到远程服务器。
适用场景:
在使用SSH节点前,需要先创建SSH凭证:
支持两种认证方式:
方式A - 密码认证(Password)
方式B - 私钥认证(Public Key) ⭐ 推荐
✅ 私钥认证为什么更好?
以"执行命令"为例:
| 参数 | 说明 | 示例 |
|---|---|---|
| 凭证 | 选择已创建的SSH凭证 | SSH连接 |
| 命令 | 要执行的Shell命令 | df -h / |
| 工作目录 | 可选,命令执行的目录 | /home/user |
现在让我们构建一个完整可执行的工作流,定时检查服务器健康状态。
该工作流每5分钟:
{
"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": {}
}host:替换为您的服务器地址username:替换为您的SSH用户名privateKey:替换为您的实际私钥内容# 查看磁盘使用情况
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在复杂工作流中,可能需要从前面节点获取动态参数:
主机:$json.serverHost
用户名:$json.username
命令:df -h $json.path添加"If"节点判断SSH命令是否成功:
条件:$json.exitCode === 0
- 成功分支:继续处理数据
- 失败分支:发送告警通知使用"Loop"或"Merge"节点连接多个SSH命令,依次或并行处理多台服务器。
下载大文件时,可配合"Stream"节点处理,避免内存溢出。
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 连接超时 | 网络不通或防火墙阻止 | 检查防火墙规则,确认服务器地址正确 |
| 认证失败 | 凭证错误 | 验证用户名密码/私钥,确保格式正确 |
| 命令失败 | 命令不存在或权限不足 | 检查命令语法,或使用sudo提权 |
| 私钥格式错误 | PEM格式不对 | 确保使用OpenSSH格式的私钥 |
| 编码问题 | 输出乱码 | 在命令前加 export LANG=en_US.UTF-8 |
✅ 推荐做法:
❌ 避免做法:
掌握了SSH节点基础后,您可以尝试:
[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#