web-dev-qa-db-ja.com

Git- Linuxでssh-agentを適切に強制終了する方法

私はLinuxでgitを使用していますが、gitlabにプッシュするときに、次のいずれかでスタックすることがあります。

debug1:gitlab.com [52.167.219.168]ポート22に接続しています。

または

debug1:client_input_channel_req:チャネル0 rtype [email protected]応答1

debug3:パケットを送信:タイプ100

Linuxを再起動することで解決できるようですが、マシンを再起動するのが好きな人はいません。だから、私はssh-agentプロセスを終了して再起動しようとしています。

しかし、プロセスはkill後は常にdefunctであり、その後ssh経由でgitをまったく使用できません。そのため、ssh-agentを再起動する方法、またはマシンを再起動せずに上記の問題を解決する方法はありますか?


@ Update

私が使用するsshキーには、最初にsshキーを使用するときに入力するキーフレーズが含まれています。

この問題は通常、Linuxデスクトップをスリープ状態から戻した後に発生するため、ネットワークが再接続されますが、これが重要かどうかは不明です。

繰り返しますが、defunctにせずにssh-agentエージェントを強制終了または再起動する方法を知っている人はいますか?

7
Eric Wang

次の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
3
danglingpointer

親プロセスがまだ監視しているため、defunctが表示されているため、プロセステーブルから削除されていません。それは大したことではありません、プロセスは殺されます。新しいssh-agentを起動するだけです:

eval $(ssh-agent)

ssh-add
0
wisbucky