如何在一台服务器的Kettle Job中执行另一台服务器的Shell脚本?
针对你在Kettle作业(.kjb)中通过「Execute a Shell script」组件执行远程服务器Shell脚本的需求,这里有几个实用且靠谱的方案,帮你解决问题:
方案1:通过SSH命令远程执行(适配现有Shell组件)
因为Kettle的「Execute a Shell script」组件本身是在本地执行命令,所以我们可以借助ssh命令直接远程调用脚本。这是最常用的方式,步骤如下:
先配置本地到远程服务器的无密码SSH登录(避免执行时需要手动输入密码,保证作业自动化):
- 在Kettle所在服务器生成SSH密钥对:
执行过程中一路按回车即可,无需设置密码。ssh-keygen -t rsa - 将本地公钥上传到远程服务器:
ssh-copy-id 你的远程服务器用户名@远程服务器IP - 测试无密码登录:执行
ssh 你的远程服务器用户名@远程服务器IP,如果能直接进入远程服务器终端,说明配置成功。
- 在Kettle所在服务器生成SSH密钥对:
在Kettle的Shell组件中填写远程执行命令:
在「Execute a Shell script」组件的「Script」输入框中,填入类似如下命令:ssh 你的远程服务器用户名@远程服务器IP "bash /path/to/你的远程脚本.sh"替换其中的用户名、IP和脚本路径即可。
方案2:使用Kettle原生SSH组件(更集成化的方式)
其实Kettle自带专门的远程执行组件——「SSH Command」(在组件面板的「Scripting」分类下),比Shell组件更适合远程场景,配置更直观:
- 拖拽「SSH Command」组件到你的作业流程中;
- 双击组件打开配置窗口,填写远程服务器的连接信息:
- 服务器IP、SSH端口(默认22)
- 认证方式:可以选「密码」直接填写,或者「密钥文件」选择你之前生成的私钥路径(
~/.ssh/id_rsa)
- 在「Command」输入框中填写远程脚本的绝对路径,比如:
/path/to/你的远程脚本.sh - 还可以在「Advanced」标签页配置执行结果的判断规则(比如脚本退出码为0时判定成功),更贴合Kettle的作业逻辑。
方案3:先下载脚本到本地再执行(备选方案,不推荐)
如果前两种方案因权限或网络限制无法使用,可以先通过scp将远程脚本下载到本地临时目录,再执行本地脚本:
# 下载远程脚本到本地 scp 你的远程服务器用户名@远程服务器IP:/path/to/你的远程脚本.sh /tmp/remote_script.sh # 给本地脚本添加执行权限并执行 chmod +x /tmp/remote_script.sh bash /tmp/remote_script.sh
⚠️ 注意:这个方案存在脚本版本不同步、临时文件清理等问题,仅作为应急备选。
额外注意事项
- 确保远程服务器的SSH服务正常运行,且Kettle所在服务器能访问远程服务器的SSH端口;
- 远程脚本必须拥有执行权限,可通过
chmod +x /path/to/你的远程脚本.sh在远程服务器上设置; - 如果使用自定义SSH端口,需要在命令中加上
-p 端口号,比如ssh -p 2222 user@ip "bash /path/to/script.sh"。
内容的提问来源于stack exchange,提问作者Kashyap Kotak
相关产品推荐
相关产品推荐

