- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最近,在部署到我的一台 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
这只发生在一些服务器上。我在许多项目中使用了相同的包装器,并且从未遇到过问题。我只是使用使用不同包装器的 forward_agent
设置 Capistrano,但它也失败了。
有什么建议吗?
附注为了完整起见,包装器:
#!/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 问题。
最佳答案
回答我自己的问题。
要修复单个命令或脚本,请指定 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 配置。
------编辑------
虽然我最初通过更改密码来修复它,但事实证明底层问题是 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;
关于使用 GIT_SSH 时 git ls-remote 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26396126/
如果我执行 ls -la,我会得到如下结果 total 16 drwxr-xr-x 4 rockse staff 136 Apr 28 16:55 . drwx------+ 23 rocks
我找到了一些Linux文件,当我键入ls -lah时,它将输出以下权限格式: ... drwxr-xr-x. 2 root root ... -rw-rw-r--. 1 root r
我正在尝试从 python 执行 ls -l 来检查文件的最后修改日期。 os.listdir 不显示长列表格式。subprocess.call 显示格式,但实际上打印它,并返回 0。我希望能够将其放
以下 shell 函数定义卡在 Cygwin 的 bash 控制台 (RHEL/Ubuntu) 中,当它被调用时它只是退出终端。 $ function ls { ls; } $ ls 为什么会出现这种
为什么这两个命令的输出不同: ls | cat ls 第一个似乎用换行符分隔文件名。 这也适用于命令 suc 有 ls > outfile 和类似的东西。 我使用的是 Mac OSX,如果这有什么不同
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我使用 eshell-parse-command 'ls -l' 得到了这个: (progn (eshell-trap-errors (eshell-named-command "l
如何使用 RegExp 在 JavaScript 中实现类似于 alias 的功能? ALIAS = [{pattern: /^ls[$ ]/, replace: 'ls --color '}] s
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我正在编写一个 shell 程序,当将值传递给 execv() 时,我需要一个指向程序名称的 char 指针(即 ls),我需要一个指向参数的 char 指针数组的指针。 我会检查并解析用户的输入,如
我对使用 bash 编写脚本还比较陌生,并编写了以下脚本: # Set variables logfile=/tmp/peter/logfile.log indir=/mls/indir/IG/ te
所以基本上我有一个任务要使用 strace 进行分析,ls 命令需要哪些系统调用才能提供与 ls -l 相同的信息。 但是对于 ls -l 命令有许多奇怪的系统调用,例如 stat 64 被调用时使用
我在 ubuntu 的文件夹中有一个文件夹列表。IE。/mnt/source/customcode/files/brands/下 root@a919794ec280:/mnt/source/custo
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
#include #include #include #include #include int flag; void catch (int sig) { if (sig == SIGI
我使用 Process 来调用 shell(zsh),我想 cd ~ 或其他一些目录,例如在 shell 中定义的 cd $PROJ_ROOT。但似乎无法处理这些 token 。如何解决这个问题? s
我在我的 Centos5 机器上运行了这个: ls -al & ; ls -al 我期待它在后台运行 ls -al,同时在前台运行 ls -al,并演示终端的输出是如何被破坏的通过这样做。 但是,我得
当我在 PowerShell 中使用 Get-ChildItem 时,我会得到目录中以行格式设置的项目列表。该列表经常会超出屏幕,如果我想查看列表的其余部分或以前的命令和输出,则迫使我向上滚动。我想为
我试图用所有必要的参数绕过调用 JNIEnv->DefineClass 方法,但当我尝试从 java 调用该方法时,它总是返回 java.lang.NoClassDefFoundError: ls.H
我是一名优秀的程序员,十分优秀!