如何将SSH代理转发至正在运行的Docker容器?
向已运行Docker容器转发SSH代理的方案
核心思路
通过动态挂载当前会话的SSH_AUTH_SOCK并传递环境变量,实现已运行容器内Shell对本地SSH代理的复用,彻底规避登出后套接字路径变化导致的失效问题
具体操作步骤
先确认本地SSH代理处于运行状态:
echo $SSH_AUTH_SOCK ssh-add -l若
ssh-add -l能列出你的个人密钥,说明代理正常工作。执行带代理转发的
docker exec命令(替换CONTAINER_ID为目标容器的ID或名称):docker exec -it \ -e SSH_AUTH_SOCK=/tmp/ssh_auth_sock \ -v $SSH_AUTH_SOCK:/tmp/ssh_auth_sock \ CONTAINER_ID bash-e SSH_AUTH_SOCK=/tmp/ssh_auth_sock:在容器内部设置环境变量,指向挂载后的代理套接字路径-v $SSH_AUTH_SOCK:/tmp/ssh_auth_sock:将本地当前有效的SSH代理套接字挂载到容器内的固定路径
进入容器后验证代理转发效果:
ssh-add -l若能列出你的本地密钥,说明转发成功,此时即可在容器内使用个人SSH密钥执行各类操作(如拉取私有代码仓库、远程登录服务器等)。
可选简化方案
- 为了方便频繁使用,可在本地的
~/.bashrc或~/.zshrc中添加别名:
之后只需运行alias docker-exec-ssh='function _docker_exec_ssh() { docker exec -it -e SSH_AUTH_SOCK=/tmp/ssh_auth_sock -v $SSH_AUTH_SOCK:/tmp/ssh_auth_sock $1 bash; unset -f _docker_exec_ssh; }; _docker_exec_ssh'docker-exec-ssh CONTAINER_ID,即可快速进入带SSH代理转发的容器Shell。
内容的提问来源于stack exchange,提问作者TomTom
相关产品推荐
相关产品推荐

