最近,当我部署到我的一台EC2服务器时,我开始看到很多超时。经过一些调查后,我将问题缩小到git ls-remote
和GIT_SSH
脚本。
这在100%的时间都有效:
eval `ssh-agent -s` && ssh-add key.pem && git ls-remote -h git@github.com:repo
这种情况占90%的时间:
GIT_SSH=wrapper.sh git ls-remote -h git@github.com:repo
仅在某些服务器上发生这种情况。我已经为许多项目使用了相同的包装器,并且从未遇到过问题。我刚刚设置Capistrano与forward_agent
使用不同的包装器,它也失败了。
有什么建议吗?
P.S。包装器,为了完整起见:
#!/usr/bin/env bash
/usr/bin/env ssh -o "StrictHostKeyChecking=no" -i "/path/to/key.pem" $1 $2
p.p.s。 git的原始版本是1.9.1。更新到2.1.1没有帮助。
- 编辑 -
将-v添加到包装器脚本允许我找到罪魁祸首:
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
似乎是一个错误:https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1254085
使用-c 3des-cbc
指定密码似乎解决了自定义包装器的问题,但它并没有解决我对Capistrano的问题。
答案 0 :(得分:1)
回答我自己的问题。
要修复单个命令或脚本,请指定SSH使用的密码:
ssh -c 3des-cbc ...
要修复好的ssh,请通过编辑/etc/ssh/ssh_config
指定要使用的密码。
取消注释:
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc
并添加:
HostKeyAlgorithms ssh-rsa,ssh-dss
根据https://bugs.launchpad.net/ubuntu/+source/openssh/+bug/1254085可能也可以通过修改MTU来修复,但我更喜欢编辑ssh配置。
------ ------ EDIT
虽然我最初通过更改密码来修复它,但确实证明了底层问题是MTU。尽管上述解决方案解决了SSH的问题,但许多SSL连接也受其影响。下面我提出一个解决方案,一劳永逸地解决所有问题。
将MTU设置为更低。以太网的默认值是1500,但我一直遇到问题,直到我将其降低到1468
sudo ip link set dev eth0 mtu 1468
如果以上解决了问题,请将以下两行添加到/etc/dhcp/dhclient.conf
,以确保重启不会重置设置:
default interface-mtu 1468;
supercede interface-mtu 1468;