当没有为远程存储库设置 ssh public/private 密钥时避免 git 的密码提示

Avoiding password prompts for git when no ssh public/private keys set for remote repository

客户允许我访问他们的一些 git 存储库。但是,除了我的帐户名外,我还获得了一个 ssh 密码,这似乎暗示着不具有 public/private 密钥身份验证选项可用的非常规期望。每当我访问远程 git 服务器时,都必须挖掘密码并将其复制粘贴到提示中,这很费力。有没有办法将密码存储在配置中,这样我就不需要这样做了?

git clone 的帮助列出了 ssh 的不同 URL 格式,但没有指定如何为此添加密码。我添加了一个 URL 格式为 ssh:${username}:${password}@${hostname} 的遥控器,但它将 ${username}:${password} 解释为用户名。

最好的选择是对客户进行基于 ssh 密钥的教育 身份验证。

也就是说,如果您必须使用密码:

无需编写 expect 脚本,您可以使用 sshpass 自动输入 ssh 密码。有多种方法可以向 sshpass 提供密码;例如,您可以设置 SSHPASS 环境变量,在这种情况下,您的命令行将如下所示:

sshpass -e git clone ...
sshpass -e git push ...

等等

您编写了一个包装脚本以避免每次都必须输入 sshpass 命令行。例如,将以下内容放在 $PATH 中的 sgit 中:

#!/bin/sh

exec sshpass -e git "$@"

现在,假设你已经设置了SSHPASS,你可以运行:

sgit clone ...
sgit push ...

如果您不想将密码存储在环境变量中,则可以使用 secret-tool 将其存储在本地密钥环中(假设您使用的是 Gnome)。在这种情况下,包装器脚本可能类似于:

#!/bin/sh

exec sshpass -d4 git "$@" 4< <(secret-tool lookup git customer)

这假设您之前使用 secret-tool store --label "Some descriptive label" git customer 存储了密码。