You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法执行Rundeck CLI命令,连接超时问题求助

问题描述

已安装Rundeck CLI,创建.rd目录并配置rd.conf文件如下:

export RD_URL=https://rundeck.url:4440
export RD_TOKEN=rundecktoken
export RD_DEBUG=1

执行CLI命令时抛出连接超时错误,错误栈:

# Including extension: org.rundeck.client.tool.commands.repository.Plugins
# Including extension: org.rundeck.client.tool.commands.enterprise.license.License
# Including extension: org.rundeck.client.tool.commands.enterprise.cluster.Cluster
# Including extension: org.rundeck.client.ext.acl.Acl
java.net.SocketTimeoutException: connect timed out
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:607)
        at okhttp3.internal.platform.Platform.connectSocket(Platform.kt:128)
        at okhttp3.internal.connection.RealConnection.connectSocket(RealConnection.kt:295)
        at okhttp3.internal.connection.RealConnection.connect(RealConnection.kt:207)
        at okhttp3.internal.connection.ExchangeFinder.findConnection(ExchangeFinder.kt:226)
        at okhttp3.internal.connection.ExchangeFinder.findHealthyConnection(ExchangeFinder.kt:106)
        at okhttp3.internal.connection.ExchangeFinder.find(ExchangeFinder.kt:74)
        at okhttp3.internal.connection.RealCall.initExchange$okhttp(RealCall.kt:255)
        at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.kt:32)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
        at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.kt:95)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
        at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.kt:83)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
        at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.kt:76)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
        at org.rundeck.client.util.StaticHeaderInterceptor.intercept(StaticHeaderInterceptor.java:38)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
        at org.rundeck.client.util.StaticHeaderInterceptor.intercept(StaticHeaderInterceptor.java:38)
        at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.kt:109)
        at okhttp3.internal.connection.RealCall.getResponseWithInterceptorChain$okhttp(RealCall.kt:201)
        at okhttp3.internal.connection.RealCall.execute(RealCall.kt:154)
        at retrofit2.OkHttpCall.execute(OkHttpCall.java:204)
        at org.rundeck.client.util.Client.checkErrorDowngradable(Client.java:166)
        at org.rundeck.client.util.Client.apiCallDowngradable(Client.java:606)
        at org.rundeck.client.tool.commands.RdToolImpl.apiCallDowngradable(RdToolImpl.java:107)
        at org.rundeck.client.tool.commands.RdToolImpl.apiCall(RdToolImpl.java:78)
        at org.rundeck.client.tool.extension.BaseCommand.apiCall(BaseCommand.java:24)
        at org.rundeck.client.tool.commands.Executions.list(Executions.java:264)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at picocli.CommandLine.executeUserObject(CommandLine.java:1972)
        at picocli.CommandLine.access$1300(CommandLine.java:145)
        at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2358)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2352)
        at picocli.CommandLine$RunLast.handle(CommandLine.java:2314)
        at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
        at picocli.CommandLine$RunLast.execute(CommandLine.java:2316)
        at picocli.CommandLine.execute(CommandLine.java:2078)
        at org.rundeck.client.tool.Main.main(Main.java:155)
        Suppressed: java.net.SocketTimeoutException: connect timed out
                ... 47 more

同时使用curl请求该HTTPS URL也出现连接超时,需解决此问题。


排查与解决步骤

1. 验证基础网络连通性

  • 执行ping rundeck.url(或直接用服务器IP),确认主机能解析并连通目标服务器。若ping不通,排查子网路由、防火墙规则或DNS配置。
  • 用telnet rundeck.url 4440或nc -zv rundeck.url 4440测试端口开放状态。若连接被拒绝/超时,检查Rundeck服务器的防火墙(iptables/ufw等)是否放行4440端口,或确认服务是否监听该端口。

2. 确认Rundeck服务状态

  • 在Rundeck服务器上执行systemctl status rundeckd(systemd环境),确认服务正常运行。若未启动,排查服务启动日志(通常在/var/log/rundeck/rundeck.log)修复启动问题。
  • 检查Rundeck配置文件rundeck-config.properties中的server.https.port,确认与RD_URL中的端口一致。若使用HTTPS,需确认SSL证书配置正确,服务能正常加载证书。

3. 检查DNS解析(使用域名时)

  • 在CLI主机执行nslookup rundeck.url或dig rundeck.url,确认解析到的IP是Rundeck服务器的正确地址。若解析错误,修正本地DNS配置或域名解析记录。

4. 配置代理(若环境需代理)

  • 若CLI主机需通过代理访问外部服务,在rd.conf中添加代理变量:
    export RD_PROXY_HTTP=http://proxy.host:port
    export RD_PROXY_HTTPS=http://proxy.host:port
    export RD_PROXY_NO_PROXY=localhost,127.0.0.1,rundeck.url
    
    也可设置系统级HTTP_PROXY/HTTPS_PROXY变量,确保curl和Rundeck CLI均能使用代理。

5. 临时调整超时时间测试

  • 执行CLI命令时增加超时参数:
    rd executions list --timeout 30
    
    curl测试用curl -m 30 https://rundeck.url:4440,若仍超时,说明不是超时时间过短问题。

6. 验证SSL证书信任(HTTPS场景)

  • 若Rundeck使用自签名证书,可临时禁用证书验证测试(生产环境不建议):
    export RD_SSL_VERIFY=false
    
    curl测试加-k参数忽略证书验证。若忽略后能连接,需将自签名证书导入CLI主机的系统信任存储。

内容的提问来源于stack exchange,提问作者Vanaan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 09:36:10