fox*_*337 5 git ssh visual-studio-2017
每当我在 Visual Studio 中“同步”(拉、推)我的存储库时,我都会注意到git-askpass.exe弹出窗口并询问我的 git 存储库的 ssh 私钥密码。没关系,但我想知道是否有办法让它与ssh-agent.exe.
当开始我的git bash的解释,我也总是开始了自己的ssh-agent.exe(它在Program Files/git相对于Visual Studio的Program Files (x86)/Microsoft Visual Studio/2017/Professional/Common7/IDE/CommonExtensions/Microsoft/TeamFoundation/Team Explorer/Git/mingw32/libexec/git-core)和ssh-add.exe我的私人密钥,以便它要求我一次密码,然后停止困扰着我。在 Visual Studio 中,我总是必须在“同步”项目时重新输入我的私钥的密码。有什么办法可以滑流吗?
我正在考虑删除整个 Visual Studio 文件夹并创建一个指向 Git for Windows 文件夹的硬链接......
还有使用 Visual Studio 2017 使用 SSH 连接到 Git 存储库,这似乎并没有涵盖我的情况。
好吧,我想我想通了这一点。
Visual Studio 2017从那里启动 git
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\cmd并git.exe从那里尝试自己的身份验证方法,直到一个工作正常为止。
我在问题中关心的 auth 方法处理已经运行的ssh-agent进程。启动它后,ssh-agent检测其环境并“方便地”建议设置哪些“标准”环境变量,例如:
SSH_AUTH_SOCK=/tmp/ssh-iTGtZyR9tAxO/agent.12088; export SSH_AUTH_SOCK;
SSH_AGENT_PID=972; export SSH_AGENT_PID;
#echo Agent pid 972;
Run Code Online (Sandbox Code Playgroud)
请注意,路径在“MINGW-speak”中,解析为%LOCALAPPDATA%\Temp. 这实际上是可以的,即使在外部git bash引用这样的路径 ( git.exe,ssh-agent.exe将能够解决它们)。
所以我有 2 个脚本,一个加载我的私钥,这是我.bashrc第一次打开一个git bash:
10_ssh.sh:
#!/usr/bin/env bash
SSH_ENV=$HOME/.ssh/environment
function start_agent {
echo "Initialising new SSH agent..."
# run it with eval so that it sticks after terminal completion
eval "/usr/bin/ssh-agent | sed 's/^echo/#echo/' > ${SSH_ENV}"
echo succeeded
chmod 600 ${SSH_ENV}
. ${SSH_ENV} > /dev/null
/usr/bin/ssh-add;
}
# Source SSH settings, if applicable
if [ -f "${SSH_ENV}" ]; then
. ${SSH_ENV} > /dev/null
#ps ${SSH_AGENT_PID} doesn't work under cywgin
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
Run Code Online (Sandbox Code Playgroud)
和我刚刚创建的一个新变量,它也将这些变量放入“Windows”中:
15_ssh_windows_hacks.sh:
#!/usr/bin/env bash
# This one makes sure that the Windows environment recognizes the ssh agent started before
if [[ `uname` == MINGW* ]]
then
setx SSH_AUTH_SOCK $SSH_AUTH_SOCK > /dev/null
setx SSH_AGENT_PID $SSH_AGENT_PID > /dev/null
fi
Run Code Online (Sandbox Code Playgroud)
唯一的警告是 Visual Studio 必须在执行此脚本后启动,因为显然它ENV在启动时只读取一次,而不是每次生成子git.exe进程时。