Git-如何在Linux上正确杀死ssh-agent

时间:2017-03-31 09:43:53

标签: linux git ssh ssh-agent

我在linux上使用git,当推送到gitlab时,有时它会卡在:

  

debug1:连接到gitlab.com [52.167.219.168]端口22。

  

debug1:client_input_channel_req:channel 0 rtype keepalive@openssh.com回复1

     

debug3:发送数据包:输入100

似乎重启linux可以解决它,但没有机构喜欢重启机器。 所以,我试图杀死ssh-agent进程,然后重新启动它。

但是在kill之后进程总是defunct,然后我根本不能通过ssh使用git,所以有没有办法重新启动ssh-agent,或者解决上面描述的问题而不重新启动机?

@Update

我使用的ssh键包含关键短语,我会在第一次使用ssh键时输入。

问题通常发生在我将Linux桌面从睡眠状态恢复后,因此网络重新连接,不确定这是否重要?

同样,是否有人知道如何杀死或重新启动ssh-agent代理,而不会使其成为defunct

5 个答案:

答案 0 :(得分:6)

您可以通过运行以下命令杀死 ssh-agent:

contained

答案 1 :(得分:3)

您可以尝试使用此bash脚本来终止SSH代理:

#!/bin/bash

## in .bash_profile

SSHAGENT=`which ssh-agent`
SSHAGENTARGS="-s"
if [ -z "$SSH_AUTH_SOCK" -a -x "$SSHAGENT" ]; then
    eval `$SSHAGENT $SSHAGENTARGS`
    trap "kill $SSH_AGENT_PID" 0
fi

## in .logout

if [ ${SSH_AGENT_PID+1} == 1 ]; then
    ssh-add -D
    ssh-agent -k > /dev/null 2>&1
    unset SSH_AGENT_PID
    unset SSH_AUTH_SOCK
fi

答案 2 :(得分:1)

多种方式:

  • killall ssh-agent
  • SSH_AGENT_PID="$(pidof ssh-agent)" ssh-agent -k
  • kill -9 $(pidof ssh-agent)

pidof 来自 procps 项目。如果它是打包的,你也许可以为你的发行版找到它

答案 3 :(得分:0)

它显示defunct可能是因为其父进程仍在监视它,因此它并未从进程表中删除。没什么大不了的,这个过程被杀死了。只需启动一个新的ssh-agent:

eval $(ssh-agent)

ssh-add

答案 4 :(得分:0)

是的,ssh-agent 可能已经失效:[ssh-agent] <defunct>

试图杀死代理可能会有所帮助:

eval "$(ssh-agent -k)"

还要尝试检查您的密钥环进程(例如 gnome-keyring-daemon),重新启动它甚至删除 ssh 套接字文件:

rm /run/user/$UID/keyring/ssh