Step.3/在 Rundeck 服务器上配置 Kerberos
要使用 Windows 域帐户访问远程主机,我们需要在我们的 Rundeck 服务器上配置 Kerberos,我们有两个选项:
Kerberos 身份验证要求我们编辑 kb5.conf 文件或者在 /etc/rundeck/profile 文件中设置一些 Java 系统属性,以定义哪些域映射到哪些域控制器。
在这个例子中,我们将配置 /etc/rundeck/profile 文件来定义我们的域控制器。
确保将这些值替换为域/领域的名称和域控制器的主机名,如下所示。
# vi /etc/rundeck/profile ################# BEFORE ################################### RDECK_JVM="-Drundeck.jaaslogin=$JAAS_LOGIN \ -Djava.security.auth.login.config=$JAAS_CONF \ -Dloginmodule.name=$LOGIN_MODULE \ -Drdeck.config=$RDECK_CONFIG \ -Drundeck.server.configDir=$RDECK_SERVER_CONFIG \ -Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \ -Drundeck.server.serverDir=$RDECK_INSTALL \ -Drdeck.projects=$RDECK_PROJECTS \ -Drdeck.runlogs=$RUNDECK_LOGDIR \ -Drundeck.config.location=$RDECK_CONFIG_FILE \ -Djava.io.tmpdir=$RUNDECK_TEMPDIR \ -Drundeck.server.workDir=$RUNDECK_WORKDIR \ -Dserver.http.port=$RDECK_HTTP_PORT \ -Drdeck.base=$RDECK_BASE" ################## AFTER ##################################### RDECK_JVM="-Drundeck.jaaslogin=$JAAS_LOGIN \ -Djava.security.krb5.realm=YOUR_DOMAIN \ -Djava.security.krb5.kdc=YOUR_DOMAIN_CONTROLLER_IP \ -Djava.security.auth.login.config=$JAAS_CONF \ -Dloginmodule.name=$LOGIN_MODULE \ -Drdeck.config=$RDECK_CONFIG \ -Drundeck.server.configDir=$RDECK_SERVER_CONFIG \ -Dserver.datastore.path=$RDECK_SERVER_DATA/rundeck \ -Drundeck.server.serverDir=$RDECK_INSTALL \ -Drdeck.projects=$RDECK_PROJECTS \ -Drdeck.runlogs=$RUNDECK_LOGDIR \ -Drundeck.config.location=$RDECK_CONFIG_FILE \ -Djava.io.tmpdir=$RUNDECK_TEMPDIR \ -Drundeck.server.workDir=$RUNDECK_WORKDIR \ -Dserver.http.port=$RDECK_HTTP_PORT \ -Drdeck.base=$RDECK_BASE" #
什么是Rundeck?
Rundeck 是一个开源软件作业调度程序和运行手册自动化系统,用于跨开发和生产环境自动化日常流程。
它结合了任务调度、多节点命令执行、工作流编排并记录发生的一切。
在本教程中,我们将展示如何添加 Windows 主机并使用 Rundeck Winrm 插件管理它,该插件使用 WinRM 连接到 Windows 主机并通过 HTTP/HTTPS 的基本或者 Kerberos 身份验证执行命令。
本教程假设我们已经安装了 Rundeck,如果我们还没有安装,可以查看本教程:如何在 CentOS 7/RHEL 7 上安装和配置 Rundeck
步骤 1./下载并安装 Rundeck Winrm 插件
转到此处的以下链接并使用以下命令下载最后一个 Rundeck Winrm 插件:
# wget https://github.com/rundeck-plugins/rundeck-winrm-plugin/releases/download/v1.3.4/rundeck-winrm-plugin-1.3.4.jar -P /var/lib/rundeck/libext/
确保将 /var/lib/rundeck/libext/目录下的所有文件更改为 Rundeck 用户:
# chown -R rundeck. /var/lib/rundeck/libext/
重新启动 Rundeck 守护进程,如下所示:
# /etc/init.d/rundeckd restart
步骤 2./为 WinRM 配置 Windows 服务器
在远程主机上,使用以管理员身份运行选项打开 PowerShell 并执行以下命令以启用 WinRM :
PS C:\Users\Administrator.onitroad> winrm qc WinRM already is set up to receive requests on this machine. WinRM is not set up to allow remote access to this machine for management. The following changes must be made: Create a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine. Enable the WinRM firewall exception. Make these changes [y/n]? y WinRM has been updated for remote management. Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine. WinRM firewall exception enabled.
PS C:\Users\Administrator.onitroad> winrm set winrm/config/service/Auth '@{Basic="true"}' Auth Basic = true Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed
PS C:\Users\Administrator.onitroad> winrm set winrm/config/client/Auth '@{Basic="true"}' Auth Basic = true Digest = true Kerberos = true Negotiate = true Certificate = true CredSSP = false
PS C:\Users\Administrator.onitroad> winrm set winrm/config/service '@{AllowUnencrypted="true"}' Service RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;IU)S:P(AU;FA;GA;;;WD)(AU;SA;GXGW;;;WD) MaxConcurrentOperations = 4294967295 MaxConcurrentOperationsPerUser = 1500 EnumerationTimeoutms = 240000 MaxConnections = 300 MaxPacketRetrievalTimeSeconds = 120 AllowUnencrypted = true Auth Basic = true Kerberos = true Negotiate = true Certificate = false CredSSP = false CbtHardeningLevel = Relaxed DefaultPorts HTTP = 5985 HTTPS = 5986 IPv4Filter = * IPv6Filter = * EnableCompatibilityHttpListener = false EnableCompatibilityHttpsListener = false CertificateThumbprint AllowRemoteAccess = true
正如我们之前所说,我们将使用 Kerberos 身份验证意味着我们将使用 Windows 域帐户。
我们需要将域用户帐户添加到远程主机上的管理员组。
步骤 6./执行测试命令
为了测试功能,我们将在远程主机上运行一个简单的命令“ipconfig”
步骤 5./将 Windows 节点添加到项目
打开项目文件夹中的 resources.xml 文件并添加以下条目以将 Windows 远程主机节点添加到资源列表。
<node name="ylcwsrv02" description="A File Server node." tags="File Server" hostname="192.168.1.11" username="winrmuser" osFamily="Windows" osName="Microsoft Windows Server 2012 R2 Standard" osArch="amd64" node-executor="overthere-winrm" winrm-auth-type="kerberos" winrm-protocol="http" winrm-cmd="CMD" winrm-kerberos-debug="true" winrm-domain="onitroad.LOCAL" winrm-password-storage-path="keys/winrmuser.password"> </node>
name : 指定远程服务器的节点名称
hostname : 远程主机节点,可以是ip地址和端口号,默认端口是5985/5986 (http/https)。
username : 远程用户名以访问远程主机
winrm-cmd :使用 Cmd 或者 PowerShell 执行命令
winrm-password-storage-path :指定密钥存储路径以从中查找身份验证密码
winrm-protocol : 确定要使用的协议,可以是 http 或者 https
winrm-auth-type :要使用的身份验证类型,可以是基本的或者 kerberos
winrm-domain : Kerberos 域
步骤 4./创建密钥存储
Rundeck 的密钥存储是一组功能,可让我们安全地存储在 Rundeck 作业中使用的私钥、公钥、密码和其他秘密。
我们需要配置我们项目的Key Storage。
这个选项是一种保存我们远程机器认证用户密码的方式,不需要直接在resources.xml文件中传递密码
在 Rundeck Server 中点击右上角的设置,进入 Key Storage
在 Key Type 中选择 Password 选项,在 Enter Text 中设置域用户帐户的密码,Storage path 是可选的,我们可以设置密码存储的文件夹名称,Name 是存储所需文件的名称密码。
输入所有详细信息,然后单击保存按钮。