Linux下Docker部署Rundeck实战指南(脚本管理工具)
1 准备工作
环境:Linux centos7.6(实体机或虚拟机)、docker
如果docker镜像拉取困难,可以安装windows桌面版docker拉镜像,然后拷贝到linux中,看个人使用习惯了
本次安装测试开发版,生产环境建议用稳定版本;使用 centos7.6虚拟机。
windows桌面版docker搜索rundeck,拉取镜像

在桌面版docker的terminal中执行命令,把镜像导出为 tar
docker save -o rundeck_snapshot.tar rundeck/rundeck:SNAPSHOT
生成rundeck_snapshot.tar
把 tar 拷到虚拟机或者物理机,比如
scp rundeck_snapshot.tar user@vm-ip:/home/user/
2 安装rundeck
确保虚拟机已经装好 Docker
docker --version
加载镜像
docker load -i rundeck_snapshot.tar
会看到
Loaded image: rundeck/rundeck:SNAPSHOT
可以查看镜像
docker images|grep rundeck
结果:

3 启动rundeck
如果单机使用,可以直接启动rundeck,如果多台服务器,先往下看看配置完再启动,不然后面会有麻烦!
docker run -d -p 4440:4440 --name rundeck -v rundeck/rundeck:SNAPSHOT
使用docker ps查看运行情况,可以看到启动正常,默认端口是4440,此时可以在本机的网页http://127.0.0.1:4440/访问应用,默认账号密码admin/admin


至此,rundeck本身软件就安装好了。下面我们开始配置。
4 配置工作
现在我们用两台虚拟机192.168.1.13/14模拟多台服务器的脚本管理。
rundeck安装在192.168.1.13的docker中,有192.168.1.13 /root/run_test/test.sh和192.168.1.14 /root/run_test_slave/slave_test.sh两个测试脚本。
远程ssh暂时用密码登录,我只是做个例子,生产环境配置 SSH Key 免密登录,下面有教程
首先配置节点
建议配置 SSH Key 免密登录(实测有些版本Rundeck 会报错,也更安全)
在 Rundeck 服务器(宿主机)上为 Rundeck 用户生成 SSH Key
mkdir -p /home/rundeck/.ssh
chmod 700 /home/rundeck/.ssh
ssh-keygen -t rsa -b 2048 -f /home/rundeck/.ssh/id_rsa -N ""
chmod 600 /home/rundeck/.ssh/id_rsa
chmod 644 /home/rundeck/.ssh/id_rsa.pub
会生成两个文件:
-
/home/rundeck/.ssh/id_rsa(私钥) -
/home/rundeck/.ssh/id_rsa.pub(公钥)
把公钥复制到两台服务器的 root 用户 ~/.ssh/authorized_keys:
sudo -u rundeck ssh-copy-id root@192.168.1.13
sudo -u rundeck ssh-copy-id root@192.168.1.14
确认能无密码登录:
ssh -i /home/rundeck/.ssh/id_rsa root@192.168.1.13
ssh -i /home/rundeck/.ssh/id_rsa root@192.168.1.14
把节点配置写成资源文件(resources.yaml),在宿主机(物理机)上创建一个 resources.yaml 文件
mkdir /home/rundeck/
vi /home/rundeck/resources.yaml
按字母i输入
node-1:
hostname: 192.168.1.13
username: root
osFamily: linux
node-2:
hostname: 192.168.1.14
username: root
osFamily: linux
按esc,输入:wq!保存并退出
然后更改文件执行权限
chmod 755 /home/rundeck/resources.yaml
最后把这个资源文件和.ssh挂载到 Docker 容器里
docker run -d -p 4440:4440 --name rundeck -v /home/rundeck/resources.yaml:/home/rundeck/resources.yaml -v /home/rundeck/.ssh:/home/rundeck/.ssh rundeck/rundeck:SNAPSHOT
这里就要注意了,对比上面写的启动方式docker run -d -p 4440:4440 --name rundeck,这里多了配置文件和.ssh,如果你刚才已经启动了,停止后那很有可能出现无法启动的情况(容器名 rundeck 已经被之前的容器占用),就要先删除容器名再重新启动(工程和任务都会被删掉,注意备份),参考下图

至此,基本节点配置完成,下面到web端进行脚本管理任务配置。
5 使用方法
打开http://127.0.0.1:4440/,默认账号密码admin/admin
点击打开或新建项目,填写名称


可以配置 Rundeck 项目使用资源文件作为节点源
-
登录 Rundeck Web UI,进入你的项目。
-
点击 Project Settings → Edit Nodes。

-
选择 Add a new Node Source。
-

-
新增一个资源模型源,类型选 File。
-
配置文件路径填写:
/home/rundeck/resources.yaml
刷新发现两个节点都显示在节点列表里

创建任务有很多种方式,结合自己需求
| 想要的操作方式 | 实现方法 |
|---|---|
| 运行时手动选机器 | 运行 Job 时,修改 Node Filter |
| 创建多个 Job,分别对应机器 | 每个 Job 固定节点 |
| 参数化节点,运行时选择 | Job 参数控制 Node Filter |
这里我为了便于控制,就每台服务器的脚本单独做成一个 Job。点击创建新任务

具体操作:
创建 Job-1 — 管理 192.168.1.13 上的脚本
-
Details-Job Name :Run test.sh on node-1
-
Nodes-Dispatch to Nodes-Node Filter:name: node-1 (确保只选中 node-1)
-
Workflow Strategy:Runs once for each node in the workflow
-
Workflow-Node Steps:Command – Execute a remote command
/root/run_test/test.sh
创建 Job-2 — 管理 192.168.1.14 上的脚本
-
Details-Job Name :Run slave_test.sh on node-2
-
Nodes-Dispatch to Nodes-Node Filter:name: node-2
-
Workflow Strategy:Runs once for each node in the workflow
-
Workflow-Node Steps:Command – Execute a remote command
/root/run_test_slave/slave_test.sh



当然这里配置方式有很多种,也可以使用配置文件的方式大量配置,取决于自己需求
注意:确保脚本 /root/run_test/test.sh 和 /root/run_test_slave/slave_test.sh 都有执行权限 (chmod +x)
如此可以可以在 Web UI 里单独执行任意一个 Job或者也可以在Schedule中给某个 Job 设置定时调度(比如每天凌晨跑),Job 之间相互独立,灵活管理

现在手动运行任务,这样可以既验证任务正确又验证跨服务器脚本管理的效果

好吧,事实证明明文方式不行,报错了/(ㄒoㄒ)/~~,Rundeck 容器里默认需要一个 SSH 私钥文件 /home/rundeck/.ssh/id_rsa,但容器内没有这个文件,所以连接节点时失败。

还是配上无密登陆吧
配完遇到一个权限问题
SSH 私钥文件和目录必须有正确权限:
docker exec -it <container_name> /bin/bash
ls -ld /home/rundeck/.ssh
ls -l /home/rundeck/.ssh/id_rsa
whoami
id
确保属主和组匹配运行容器内服务的用户 UID/GID,通常 Rundeck 容器里 rundeck 用户的 UID 是 1000
容器内查看文件权限和用户
docker exec -it <container_name> /bin/bash
ls -ld /home/rundeck/.ssh
ls -l /home/rundeck/.ssh/id_rsa
whoami
id
-
目录权限是
700(drwx------) -
私钥权限是
600(-rw-------) -
当前用户是拥有该权限的用户(属主)
如果属主不匹配,回宿主机执行:
chown -R <容器内运行用户UID>:<GID> /home/rundeck/.ssh
重启容器使权限生效
docker restart <container_name>
第一次连接远程主机时,known_hosts 需要确认指纹或预先写入
ssh -i /home/rundeck/.ssh/id_rsa root@192.168.1.13
正常运行了

20260113
再更新一个坑。。。远程服务器无法连接,是公钥问题,可以按下面步骤检查修改
在容器中执行
ssh -i /home/rundeck/.ssh/id_rsa root@192.168.1.14
如果仍需要密码确认,key 失败 → 回退到 password 登录,则说明Rundeck 没用这把 key,无效
在宿主机容器中
cat /home/rundeck/.ssh/id_rsa.pub
复制整个,直到xxx@xxx
在 远程服务器比如192.168.1.14 上配置 root 的 authorized_keys
mkdir -p /root/.ssh
chmod 700 /root/.ssh
vi /root/.ssh/authorized_keys
把刚才复制的 公钥 粘进去,保存。
chmod 600 /root/.ssh/authorized_keys
检查下面命令直接登录不询问密码了就正常了
ssh -i /home/rundeck/.ssh/id_rsa root@192.168.1.14

更多推荐
所有评论(0)