git SSH操作脚本
在脚本中使用git,需要面对和解决以下问题:
避免面对新的git仓库服务器时需要交互确认接受HOST主机密钥(例如从github clone,首次操作需要交互确认接受)
不同的git服务器可能使用了不同的密钥对,通常出于安全,不会把主密钥的公钥用于git仓库,而是生成不同的密钥对用于不同的生产git仓库
备注
我在 Debian镜像(tini进程管理器) 实践中,使用了本文方法来解决Dockerfile中执行 git SSH 的问题
命令行
解决方法是定制 core.sshCommand
命令参数:
通过定制SSH命令来确保项目(命令需要在git目录下)使用了特定密钥,并且忽略HOST主机密钥确认(可选,仅用于脚本)
# 在git目录下执行可为项目单独设置认证密钥
git config core.sshCommand 'ssh -i /home/admin/src/id_rsa -o StrictHostKeyChecking=no'
# 如果不在git目录下执行,则需要使用 --global 参数,否则会报错 "fatal: not in a git directory"
git config --global core.sshCommand 'ssh -i /home/admin/src/id_rsa -o StrictHostKeyChecking=no'
配置方法
更为灵活的配置,是在 ~/.ssh/config
中添加:
在
~/.ssh/config
配置指定git密钥以及忽略主机密钥确认Host github.com
User git
IdentityFile ~/.ssh/id_rsa
StrictHostKeyChecking no