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 SettingsEdit 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

更多推荐