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

如何为Windows SSH登录授予凭证访问权限以执行Docker操作

Windows SSH会话执行Docker登录/推送的凭证错误解决办法

这个错误的核心原因是Windows SSH会话默认没有权限访问系统凭据管理器,而Docker默认会将登录凭证存储在这里,导致无法读写凭证。以下是几种可行的解决方式:

1. 让Docker直接将凭证存在配置文件中(无需凭据管理器)

这种方式绕过Windows凭据管理器,适合受控的自动化环境(比如Jenkins):

  • 先在Windows机器上确认%USERPROFILE%\.docker目录存在,不存在则手动创建
  • 创建或编辑该目录下的config.json文件,确保内容中没有credsStore字段(或者将其设为空字符串"")
  • 在SSH会话中执行登录命令时,用--password-stdin传入密码,避免触发凭据管理器交互:
echo "你的Docker仓库密码" | docker login --username 你的用户名 --password-stdin 仓库地址(可选,默认Docker Hub)

执行后,凭证会直接写入config.json,后续docker push即可正常执行。

2. 给SSH用户添加凭据管理器访问权限

通过修改Windows本地安全策略,授予SSH登录用户访问凭据管理器的权限:

  • 运行secpol.msc打开本地安全策略
  • 依次进入本地策略 -> 用户权限分配
  • 找到作为操作系统的一部分操作,添加你的SSH登录用户(或Jenkins使用的服务账户)
  • 找到创建全局对象,同样添加该用户
  • 重启SSH服务和Docker服务:
Restart-Service sshd
Restart-Service DockerDesktopService

完成后重新通过SSH登录,即可正常执行docker login和docker push。

3. Jenkins专属方案:用Jenkins凭证管理替代本地存储

如果是Jenkins远程执行任务,完全不需要在Windows机器上存储凭证:

  • 在Jenkins的凭证管理中添加Docker仓库的用户名密码凭证,记录凭证ID
  • 在Pipeline脚本中用docker.withRegistry包裹推送步骤:
pipeline {
    agent any
    stages {
        stage('Push Docker Image') {
            steps {
                script {
                    docker.withRegistry('https://你的仓库地址', 'jenkins凭证ID') {
                        docker.build('你的镜像名').push()
                    }
                }
            }
        }
    }
}

Freestyle任务则可以直接在Docker构建步骤中选择对应的Jenkins凭证,无需手动执行docker login。

4. 改用Docker远程API操作(替代SSH)

开启Docker Desktop的远程API,让Jenkins直接通过API与Docker交互,彻底避开SSH权限问题:

  • 打开Docker Desktop设置 -> 通用,勾选Expose daemon on tcp://localhost:2375 without TLS(生产环境建议配置TLS加密)
  • 在Jenkins中配置Docker服务器地址为tcp://Windows机器IP:2375,之后即可通过Jenkins Docker插件直接完成镜像推送,不需要通过SSH登录执行命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:33:33