docker_login_check
脚本检查 Docker 凭证配置、GPG 密钥、Pass 加密仓库及登录状态,确认 Docker 以 pass 加密方式成功登录、凭证永久安全保存。
docker_login_check
检查 Docker 凭证配置、GPG 密钥、Pass 加密仓库及登录状态,确认 Docker 以 pass 加密方式成功登录、凭证永久安全保存。
一键脚本
bash <(curl -sL gitee.com/meimolihan/linux-command_sh/raw/master/docker_login_check.sh)
效果预览
创建 PAT 令牌
创建步骤:
- 点击 New Personal Access Token
- 名字随便填
- 权限勾选:
read & writeDelete(可选)
- 点击 Generate
- 复制生成的以
dckr_开头的令牌(这就是你的新密码) - 使用示例:docker login -u 用户名 -p dckr_pat_密钥
脚本源码
#!/bin/bash
set -euo pipefail
list_color_init() {
export gl_hui=$'\033[38;5;59m'
export gl_hong=$'\033[38;5;9m'
export gl_lv=$'\033[38;5;10m'
export gl_huang=$'\033[38;5;11m'
export gl_lan=$'\033[38;5;32m'
export gl_bai=$'\033[38;5;15m'
export gl_zi=$'\033[38;5;13m'
export gl_bufan=$'\033[38;5;14m'
export reset=$'\033[0m'
}
list_color_init
log_info() { echo -e "${gl_lan}[信息]${gl_bai} $*"; }
log_ok() { echo -e "${gl_lv}[成功]${gl_bai} $*"; }
log_warn() { echo -e "${gl_huang}[警告]${gl_bai} $*"; }
log_error() { echo -e "${gl_hong}[错误]${gl_bai} $*" >&2; }
sleep_fractional() {
local seconds=$1
if sleep "$seconds" 2>/dev/null; then return 0; fi
if command -v python3 >/dev/null 2>&1; then python3 -c "import time; time.sleep($seconds)"; return 0; fi
local int_seconds=$(awk -v s="$seconds" 'BEGIN{print int(s+0.999)}')
sleep "$int_seconds"
}
break_end() {
echo -e "${gl_lv}操作完成${gl_bai}"
echo -e "${gl_bai}按任意键继续${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai} \c"
read -r -n 1 -s -p ""
echo ""
clear
}
check_docker_credential() {
clear
echo -e "${gl_zi}>>> Docker 登录状态检查${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
echo ""
echo -e "${gl_huang}>>> 检查 Docker 凭证配置${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
cat /root/.docker/config.json
echo ""
echo ""
echo -e "${gl_huang}>>> 检查凭证助手状态${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
if command -v docker-credential-pass &>/dev/null; then
docker-credential-pass version
log_ok "凭证助手正常运行"
else
log_error "未找到 docker-credential-pass"
fi
echo ""
echo -e "${gl_huang}>>> 检查 GPG 密钥${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
gpg --list-secret-keys 2>/dev/null || log_warn "未找到 GPG 私钥"
echo ""
echo -e "${gl_huang}>>> 检查 Pass 密码仓库${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
pass list 2>/dev/null || log_warn "Pass 仓库未初始化"
echo ""
echo -e "${gl_huang}>>> 检查 Docker 登录状态${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
local stored_cred docker_username
stored_cred=$(pass list 2>/dev/null | grep "docker-credential-helpers" | head -1 || true)
docker_username=$(docker info 2>/dev/null | grep -i "Username" || true)
if [[ -n "$docker_username" ]]; then
log_ok "Docker 登录成功:$docker_username"
elif [[ -n "$stored_cred" ]]; then
log_ok "Docker 登录成功(加密存储模式,docker info 不显示用户名)"
else
log_error "Docker 未登录"
fi
echo ""
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
break_end
}
check_docker_credential
创建本地脚本
new_script="new_test.sh"
cat > "$new_script" << 'EOF'
#!/bin/bash
# 粘贴脚本源码
EOF
# 保留本地脚本,去掉 rm -f "$new_script"
chmod +x "$new_script" && ./"$new_script" && rm -f "$new_script"