问题描述
当使用GIT时,我有problems with using GIT over SSH,因为它在工作和家里使用不同的调制解调器都可以正常工作,显然我的家用调制解调器正在起作用。我通过HTTP连接没有问题。
所以,我假设这是一个SSH问题,但我不是直接使用它的专家。是否有任何可以运行的命令设置”test”连接,并让我确切知道问题发生的时间和地点?
几乎所有的”larger”命令(如fetch
,clone
,或用大量的数据push
)从git
(即使与-v
运行)刚刚”hang”在没有说明为什么他们已经停止了远程连接的中间,让他们有来无使用。
有什么方法可以获得有关SSH连接中发生的事情的更多细节吗?
最佳解决思路
我有类似的问题。为了调试,我在ssh_config中添加了一行。我是这样做的:
git remote -v
在那里你会找到这样一条线:
origin git@github.com:me/test.git (fetch)
origin git@github.com:me/test.git (push)
在这种情况下,主机是github.com
。现在你可以在你的ssh配置中添加一个Host-Entry:
vim ~/.ssh/config
并添加:
Host github.com
LogLevel DEBUG3
在使用git操作时,您现在应该获得大量调试消息。要获得较少的调试消息,请尝试使用DEBUG1
对于GIT版本> = 2.3.0,请参阅answer from @Flimm以获得更智能的解决方案。
次佳解决思路
环境变量
从Git版本2.3.0开始,您可以使用环境变量GIT_SSH_COMMAND
并传递-v
详细参数,如下所示:
GIT_SSH_COMMAND="ssh -v" git clone example
要更加详细,请将其设为-vvv
:
GIT_SSH_COMMAND="ssh -vvv" git clone example
Git配置
从Git版本2.10.0(将在Ubuntu 17.04的repos中)中,您可以全局保存此配置,或者按照此示例中的每个repo保存:
git config core.sshCommand "ssh -vvv"
git pull
第三种解决思路
通过man git
读取,您可以设置一些有用的环境变量,GIT_TRACE_PACKET
和GIT_TRACE
。例如:
GIT_TRACE_PACKET=true git clone ssh://[...]
游戏有点晚了,但希望这有助于某人!
第四种思路
每个man ssh
:
-v Verbose mode. Causes ssh to print debugging messages about its progress. This
is helpful in debugging connection, authentication, and configuration problems.
Multiple -v options increase the verbosity. The maximum is 3.
所以,试试ssh -v
。如果这不能告诉您需要知道的内容,可以添加一个或两个v
以获取更详细的调试信息。特别是对于Github,尝试ssh -vvvT git@github.com
。
通常,根据我的经验,当客户端无法完成所选的身份验证方法时,会在安装过程中挂起SSH会话。使用正确的权限检查您的私钥是否在正确的位置,并匹配您给予Github的公钥。
第五种思路
我没有看到告诉git(1)用于ssh(1)的外部命令的方法,但作为一种解决方法,只需将/path /to /ssh重命名为/path/to/ssh.orig,创建一个shell脚本包装器/路径/到/ssh,并添加-v标志:
$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh
if [ -x /usr/bin/ssh.orig ]; then
exec /usr/bin/ssh.orig -v -v -v "${@}"
fi
$ sudo chmod a+x /usr/bin/ssh
在执行通过ssh传输操作的git命令时,我得到详细的输出。完成调试后,删除脚本并将/path/to/ssh.orig恢复到/path /to /ssh。