调用
git push
命令时,会出现警告提示,如用户名/密码提示、ssh host authenticity 确认,需用户交互才能继续完成 git 后续动作。在某些应用场景中,用户希望自动化操作而不需要人工干预。
SSH 方式推送
url 格式
[email protected]:<username>/<reponame>
情况描述
参考 Github help documents,完成设置后,在首次连接 github 时(执行clone
,fetch
,push
等命令),出现如下提示:
确认后,将在 ~/.ssh 目录下建立 known_hosts 文件保存 github.com 的公钥信息。The authenticity of host 'github.com (a.b.c.d)' can\'t be established. RSA key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Are you sure you wan\'t to continue connecting (yes/no)?
解决办法
原理:ssh config 文件中 StrictHostKeyChecking 选项控制 ssh 的登录验证行为
方法二:设置 GIT_SSH 环境变量
需事先建立 shell 脚本,然后设置该环境变量值为该 shell 脚本名称
方法三:设置 GIT_SSH_COMMAND 环境变量touch myssh vi myssh (内容如下) !/bin/sh exec /usr/bin/ssh -o StrictHostKeyChecking=no "$@" (保存myssh后,执行如下操作) export GIT_SSH=myssh
export GIT_SSH_COMMAND="/usr/bin/ssh -o StrictHostKeyChecking=no"
(linux)export GIT_SSH_COMMAND="ssh -o StrictHostKeyChecking=no"
(mingw)https 方式推送
git 通过 credential helper 保存用户凭证,git 目前提供两种 helper(用户也可使用第三方helper),分别是 credential-cache 和 credential-store。其中,credential-cache 只能把用户凭证保留在内存中,而 credential-store 则可以把用户凭证保存在文件中。 执行如下命令
(执行git config credential.helper store cat https://<username>:<password>@github.com >> ~/.git-credentials
git push
后,生成 ~/.git-credentials 文件,格式为https://<username>:<password>@github.com
)小结
git 默认提供的 credential-store helper 以明文形式保存用户凭证,与 ssh 相比,安全性较差,除非使用更安全的第三方 credential helper。建议使用 ssh 方式。