【n8n教程】:SSH节点,实现远程服务器自动化管理
SSH(Secure Shell)是远程访问服务器的标准安全协议。在n8n中,SSH节点让您能够在工作流中执行远程命令、上传和下载文件,从而实现强大的服务器自动化管理能力。无论是定期检查服务器状态、批量部署应用,还是自动化日志清理,SSH节点都是您的得力助手。
为什么选择SSH节点?
在n8n中使用SSH节点有以下优势:
- 安全可靠:基于SSH加密协议,确保通信安全
- 功能全面:支持命令执行、文件上传/下载三大核心操作
- 自动化强大:将重复的服务器任务自动化,节省时间和人力
- 灵活集成:与其他节点无缝配合,构建复杂的自动化流程
- 远程控制:从任何地方管理多台服务器
核心功能详解
1. 执行命令(Execute Command)
这是SSH节点最常用的功能。您可以在远程服务器上执行任何Shell命令。
常用场景:
- 检查服务器磁盘空间:
df -h / - 查看内存使用情况:
free -h - 检查进程状态:
ps aux | grep nginx - 重启服务:
systemctl restart nginx - 运行脚本:
bash /path/to/script.sh
2. 下载文件(Download File)
将远程服务器上的文件下载到n8n工作流中进行处理。
适用场景:
- 定期备份配置文件
- 收集日志文件进行分析
- 获取服务器生成的报告
3. 上传文件(Upload File)
将文件从n8n上传到远程服务器。
适用场景:
- 部署配置文件更新
- 上传新版本脚本
- 批量传输文件到服务器
快速开始
第一步:配置SSH凭证
在使用SSH节点前,需要先创建SSH凭证:
- 打开n8n工作流编辑器
- 添加SSH节点:在左侧节点面板搜索"SSH"
- 点击"创建新凭证",选择身份验证方式
支持两种认证方式:
方式A - 密码认证(Password)
- 主机地址:远程服务器的IP或域名
- 用户名:SSH用户名(如 ubuntu、root等)
- 密码:SSH密码
- 端口:通常为22(如非默认需修改)
方式B - 私钥认证(Public Key) ⭐ 推荐
- 主机地址:远程服务器的IP或域名
- 用户名:SSH用户名
- 私钥:您的SSH私钥内容(PEM格式)
- 密码短语(可选):如果私钥有密码保护
- 端口:通常为22
✅ 私钥认证为什么更好?
- 更安全(不需要存储明文密码)
- 自动化友好(无需人工输入)
- 通常是生产环境标准做法
第二步:配置操作参数
以"执行命令"为例:
| 参数 | 说明 | 示例 |
|---|---|---|
| 凭证 | 选择已创建的SSH凭证 | SSH连接 |
| 命令 | 要执行的Shell命令 | df -h / |
| 工作目录 | 可选,命令执行的目录 | /home/user |
实战案例:服务器健康检查工作流
现在让我们构建一个完整可执行的工作流,定时检查服务器健康状态。
工作流功能说明
该工作流每5分钟:
- 自动连接到远程服务器
- 执行系统命令获取磁盘、内存、运行时间
- 处理和格式化输出结果
- 保存数据供后续使用(可扩展为发送告警)
完整工作流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": {}
}
如何导入和使用
- 复制上面的JSON代码
- 打开n8n工作流编辑器
- 点击右上角菜单(...)→ 导入工作流
- 选择从URL或直接粘贴JSON
- 修改以下参数:
host:替换为您的服务器地址username:替换为您的SSH用户名privateKey:替换为您的实际私钥内容
- 配置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密钥认证而非密码
- 将凭证存储在n8n的安全凭证存储中
- 定期轮换SSH密钥
- 限制SSH端口的访问权限
- 使用非root用户执行任务
- 为SSH用户配置最小权限
❌ 避免做法:
- 在工作流中硬编码密码
- 使用root账户执行普通任务
- 保存凭证到代码或文档
- 在公网上暴露SSH端口
下一步建议
掌握了SSH节点基础后,您可以尝试:
- 构建监控系统:定时检查多台服务器,异常时发送Slack/邮件告警
- 自动化部署:配合Webhook节点,实现代码更新后自动部署
- 日志收集:定期从服务器下载日志,集中分析和备份
- 批量配置管理:统一更新多台服务器的配置文件
- 备份自动化:定时执行服务器备份脚本,保障数据安全