复用已知的ssh公私钥实现docker的ssh传输

由于项目要求,需要经常从github上克隆镜像,本地网络不是特别稳定的话,https很容易挂,而ssh相对比较稳定。故本文通过已有的ssh公私钥,实现docker从github的ssl链接进行克隆。

1.生成公私钥

随便找一台ubuntu系统的电脑运行如下代码:

bash 复制代码
ls -al ~/.ssh

apt-get update
apt-get -y install openssh-server

#一路回车
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

文件在~/.ssh目录,生成四个文件

2.配置github

bash 复制代码
# 复制所有内容到剪切板
cat ~/.ssh/id_rsa.pub
  1. 登录 GitHub。

  2. 前往 Settings > SSH and GPG keys

  3. 点击 New SSH key,粘贴公钥内容并保存。

bash 复制代码
# 测试连通性
ssh -T git@github.com

# 会显示下面内容
# Hi username! You've successfully authenticated, but GitHub does not provide shell access.

# 使用ssh克隆username的imagename镜像到本地/host/path目录
# git clone -b main git@github.com:username/imagename.git /host/path

3.其他用户配置

如上所述,普通用户a已经配置完成,尚需配置root用户,使其能复用用户a的公私钥进行ssh传输

bash 复制代码
# 创建.ssh目录
cd ~
mkdir .ssh
chmod 700 .ssh

# 赋访问权限
cp sshd_config sshd_config.bak
vim sshd_config
# 修改为PasswordAuthentication yes 保存退出

# 重启ssh服务
service sshd restart

# 复制id_rsa、id_rsa.pub、known_hosts文件到root的.ssh目录
cp id_rsa /root/.ssh/id_rsa
cp id_rsa.pub /root/.ssh/id_rsa.pub
cp known_hosts /root/.ssh/known_hosts
chmod 600 id_rsa

# 创建临时目录测试
cd ~
mkdir tmp
cd tmp
git clone -b main git@github.com:username/imagename.git ./imagename

# 测试成功后,删除.ssh文件下的目录
cd ~/.ssh
rm -rf *

4.docker配置

Dockerfile文件:

bash 复制代码
# 安装ssh服务
RUN apt-get update && apt-get install -y --no-install-recommends openssh-server

# 复制所需文件到指定目录
COPY id_rsa /root/.ssh/id_rsa
COPY id_rsa.pub /root/.ssh/id_rsa.pub
COPY known_hosts /root/.ssh/known_hosts
RUN chmod 600 /root/.ssh/id_rsa \
    && chmod 644 /root/.ssh/id_rsa.pub

COPY setup_repo.sh /root/setup_repo.sh
RUN chmod +x /root/setup_repo.sh && \
    /bin/bash /root/setup_repo.sh
复制代码
克隆脚本setup_repo.sh:
bash 复制代码
#!/bin/bash

set -e

git clone -b main git@github.com:username/imagename.git /hostpath/imagename

cd /hostpath/imagename

# 通过commit哈希指定版本
git checkout 1da7e69de3bcc18c8a965f1cd480aa5394a94b45

cd /

5.加载镜像

将Dockerfile文件,setup_repo.sh,id_rsa、id_rsa.pub、known_hosts和其他文件放到同一个目录,执行如下:

bash 复制代码
# 构建imagename镜像
docker build . --network=host -t imagename

# 启动imagename镜像
docker run -it --network=host -v ./filename:/hostpath/filename imagename

6.结语

最重要的是设置私钥的600权限,否则可能会出问题。

相关推荐
Ramboooooooo12 分钟前
SkyWalking-10.4.0 Docker + Nacos + Elasticsearch 生产级部署手册
elasticsearch·docker·skywalking
runningshark34 分钟前
Github Copilot 智能编程助手深度评测
github·copilot
苏灿烤鱼42 分钟前
AI Agent 深拆 | 图能让 AI 决策可追责吗?Semantica 登顶拆解
python·github·agent
fthux11 小时前
装闭 RenoPit 源码解析(04):装修图纸和合同文件上传处理流程
人工智能·ai·开源·github·open source·renopit
南巷羽14 小时前
用 TRAE Work 把 20 条 GitHub Issue 变成可复核的需求优先级清单
github·产品
修罗王16 小时前
Linux Docker 服务管理与排查实战指南(新手速查版)
运维·docker
栩栩云生16 小时前
AI 最大的安全问题:它让”发送数据”看起来像”继续思考”
安全·github·agent
m4Rk_17 小时前
【论文阅读】Agent 记忆机制(34):MemoryBank——用遗忘曲线管理可强化的长期对话记忆
论文阅读·人工智能·学习·开源·github
一点一木18 小时前
Seed Evolving 深度测评:我用它造了一个 AI 出题工具
人工智能·python·github
张龙68718 小时前
Docker 镜像瘦身实战:从 1.2GB 到 128MB,我踩过的 7 个坑和一套可复制的方法论
运维·后端·docker