如何解决`ddev auth ssh`与YubiKey配合使用的报错问题?
解决ddev auth ssh与YubiKey配合使用的问题
问题背景
你的.ssh目录结构如下:
/home/<redacted>/.ssh/ ├── config ├── id_rsa_yubikey.pub └── known_hosts
由于YubiKey的私钥存储在硬件设备中而非本地目录,运行ddev auth ssh时,默认命令会尝试查找本地私钥并执行ssh-add,导致报错:
Docker command 'docker [run -it --rm --volumes-from=ddev-ssh-agent --user=1001 --entrypoint= --mount=type=bind,src=/home/<redacted>/.ssh,dst=/tmp/sshtmp drud/ddev-ssh-agent:v1.20.0-built bash -c cp -r /tmp/sshtmp ~/.ssh && chmod -R go-rwx ~/.ssh && cd ~/.ssh && ssh-add $(file * | awk -F: "/private key/ { print \$1 }")]' failed: exit status 1
解决方案
方法1:手动执行简化版容器命令,跳过私钥添加步骤
默认ddev auth ssh的核心是把本地.ssh目录复制到ddev-ssh-agent容器中,你可以手动执行去掉ssh-add的命令,只完成目录复制和权限设置:
docker run -it --rm --volumes-from=ddev-ssh-agent --user=1001 --entrypoint= --mount=type=bind,src=/home/<redacted>/.ssh,dst=/tmp/sshtmp drud/ddev-ssh-agent:v1.20.0-built bash -c "cp -r /tmp/sshtmp ~/.ssh && chmod -R go-rwx ~/.ssh"
方法2:配置ddev容器共享本地ssh-agent
如果本地ssh-agent已经加载了YubiKey的密钥(可通过ssh-add -l验证),可以让ddev容器直接使用本地的ssh-agent套接字:
- 在项目的
.ddev/config.yaml中添加以下配置:web_environment: - SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock - 重启ddev服务:
这样容器会直接使用本地已加载YubiKey密钥的ssh-agent,无需在容器内执行ddev restartssh-add。
方法3:确保容器内支持YubiKey的PKCS#11认证
如果你的.ssh/config中配置了PKCS#11 Provider(比如使用OpenSC),需要让ddev-ssh-agent容器能访问YubiKey的硬件和对应模块:
- 先在本地确认
.ssh/config的配置,类似:Host * PKCS11Provider /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so - 运行容器时挂载YubiKey设备和PKCS#11模块目录:
注意:docker run -it --rm --volumes-from=ddev-ssh-agent --user=1001 --entrypoint= --mount=type=bind,src=/home/<redacted>/.ssh,dst=/tmp/sshtmp --mount=type=bind,src=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so,dst=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so --device=/dev/ttyACM0 drud/ddev-ssh-agent:v1.20.0-built bash -c "cp -r /tmp/sshtmp ~/.ssh && chmod -R go-rwx ~/.ssh"/dev/ttyACM0是YubiKey的设备路径,可能需要根据实际情况调整。
内容的提问来源于stack exchange,提问作者stefanfrede
相关产品推荐
相关产品推荐

