获取ssh-agent使用从Windows命令shell运行的git
我使用OpenSSH安装了msysgit。我正在连接到一个gitosis回购。从混帐bash中,我创建了一个.profile
文件运行的ssh-agent(如果尚未运行),每次git的庆典被打开,using this script获取ssh-agent使用从Windows命令shell运行的git
SSH_ENV=$HOME/.ssh/environment
function start_agent {
echo "Initialising new SSH agent..."
/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
我也使用Git扩展,从运行的git命令Windows命令提示符,而不是git bash。所以,ssh没有看到正在运行的ssh-agent。有没有可能解决这个问题?
你可以用你的.profile
的脚本包装你的git可执行文件,导致加载ssh-agent
环境变量。
要么将一个名为git
的脚本放在路径中比实际git更早的目录中,要么将git扩展配置为调用您的包装来代替真正的git。
即使你可能已经解决了吧...使用eval
命令使ssh_agent
过程棒:
eval `ssh-agent.exe`
然后使用ssh-add添加你需要的按键。
对于msysgit您可能需要修改了一下解决方案提供由https://help.github.com/articles/working-with-ssh-key-passphrases
declare -x SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
正如你可能会注意到我所做的是在PS呼叫唯一的变化,因为msysgit不要使用-U但 - ü
我有同样的问题,因为你的话,我试着在我的主目录添加此代码
#! /bin/bash
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
到文件.bashrc
。它的工作原理!
这对我有用。我认为我特别的问题是我需要指定我需要使用的_rsa文件。 – 2015-06-30 15:29:23
谢谢@bricklore :) – 2016-01-19 14:32:33
反复退出并打开新的bash会话导致每次新会话都会产生一个新的ssh-agent.exe。在@ Braiam的答案中链接到的文章中的解决方案阻止了我。 – Sean 2017-03-30 19:13:14
我发现实现这一目标最顺利的方式是使用Pageant作为SSH代理和plink。
您需要为远程中使用的主机名配置putty会话。
您还需要plink.exe,它可以从与putty相同的站点下载。
而且你需要佩戴你的钥匙的Pageant运行。我在我的启动文件夹中有一个快捷方式,用于登录时加载我的SSH密钥。
当您安装git-scm时,可以指定它使用tortoise/plink而不是OpenSSH。最终效果是你可以随时打开git-bash,并且推/拉而不会对密码提出挑战。
同样适用于putty和WinSCP会话,当pageant加载密钥时。它让生活变得更加简单(和安全)。
在Windows 10这个工作对我来说
- 运行git bash的
touch ~/.profile
-
start ~/.profile
打开.profile
- 以下添加到
.profile
#! /bin/bash
eval `ssh-agent -s`
ssh-add ~/.ssh/*_rsa
这是基于this answer。唯一的区别是.bashrc
没有工作,而是.profile
工作。
upvote for'touch' – 2016-10-07 07:40:15
这对我有用。谢谢!! – nonintanon 2017-11-18 20:04:03
简单的两线解决方案从this answer:
# ~/.profile
if ! pgrep -q -U `whoami` -x 'ssh-agent'; then ssh-agent -s > ~/.ssh-agent.sh; fi
. ~/.ssh-agent.sh
这每次打开一个git bash的时候产生一个新的'SSH-agent'*流程。 – 2013-09-27 11:06:27
啊,你看,不是真的,至少当我检查它,如果我没有记错,它检查是否有一个已经运行,否则它会产生过程。现在他们固定它,所以没有理由再使用这个 – Cu7l4ss 2013-10-13 08:27:11
@ Cu7l4ss如果他们修复它,那么为什么我有这个问题? - 我可以启动ssh-agent并添加密钥,但是这会立即消失,'ssh-add -l'返回“代理没有身份”。我甚至得到这个目标的唯一方法就是你列出的命令。 - 只是fyi,目前还是个问题。 – Zeveso 2013-11-03 21:03:33