Linux中ssh登陆慢的两种原因
useDNS配置导致登陆慢
如果ssh server的配置文件(通常是 /etc/ssh/sshd_config )中设置 useDNS yes ,可能会导致 ssh 登陆卡住几十秒。将该配置项设为 no,然后重启 ssh 服务,再次登陆就恢复正常。将useDND配置为yes会导致登陆慢,原因是在登陆的过程中服务端会发送四次反向域名解析的请求,每次请求相隔5s,共20s,反映在登陆过程中就是卡了几十秒。域名解析是根据域名查找所对应IP的过程,反过来, 反向域名解析就是根据IP查找域名的过程,ssh服务端向DNS服务器发起反向域名解析的请求,请求解析客户端IP的域名。由于DNS服务器配置(该配置位于 /etc/resolv.conf )不正确,导致发出的请求没有响应。
ssh中该配置主要用于安全加固,服务器会先根据客户端的IP地址进行DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始IP地址一致,通过此种措施来防止客户端欺骗。但平时我们登陆服务器的客户端IP基本在DNS服务器中没有PTR记录,因此该功能显得很无用,推荐直接设为no,当然如果你理解了上述的过程,也能找到其他方法保证即使该配置打开了也不会变慢。
- 在配置文件
/etc/ssh/sshd_config中设置一个可达的DNS服务器 - 在
/etc/hosts文件中手动添加一条你登陆客户端与主机名的对应关系
GSSAPIAuthentication配置导致登陆慢

除了常见的useDNS配置可能导致ssh登陆慢之外,还有一个配置GSSAPIAuthentication也会导致登陆慢,该配置项的含义是允许GSSAPI认证,属于ssh协议的一种认证方式。ssh协议有多种认证方式,平时常用的有密码认证、公钥认证等,但ssh协议支持的远不止这两种,那么至于一次ssh登陆到底用哪种认证方式是怎么决定的呢?这个取决于ssh的客户端和服务端的协商的结果,ssh服务端决定了支持哪些登陆方式。在登陆过程中经常协商之后有个认证的顺序,然后依次选择认证方式,直到认证成功(登录方式可以通过ssh命令行中可以通过增加 -vvv 选项来打印整个登陆的过程的debug日志),我们不需要关心GSSAPI认证到底是什么鬼,只需关心为什么允许了GSSAPI认证就会导致ssh登陆慢呢?从debug信息很难看出来,还是通过抓包来看。通过抓包,同样也发现有大量的DNS反向域名解析的报文,但这次需要解析的是服务端的IP,同样由于客户端侧配置的DNS服务器不可达,导致超时重试多次。结合ssh登陆的过程日志,不难发现这写DNS反向域名解析的报文是GSSAPI认证需要的。
那么解决该问题就比较简单了,下面任何一种都可:
- ssh 客户端配置(
/etc/ssh/ssh_config)将GSSAPIAuthentication设为 no - ssh 服务端配置(
/etc/ssh/sshd_config)将GSSAPIAuthentication设为 no - ssh 客户端正确配置 DNS 服务器(
/etc/resolv.conf) - ssh 客户端 hosts 文件(
/etc/hosts)增加服务端的IP、主机名对应关系
参考:http://ju.outofmemory.cn/entry/344691
Linux中ssh登陆慢的两种原因的更多相关文章
- Linux ssh登陆慢的两种原因分析
Linux ssh登陆慢的两种原因分析 如果做运维就一定会遇到ssh登陆Linux服务器慢的问题,问题比较好解决,一般Google之后有很多文章都告诉你解决方法,但是很少有文章分析为什么会慢,这篇文章 ...
- linux中mysql密码找回的两种方式
方法一:修改my.cnf配置文件 1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 ...
- Linux中增加软路由的两种方法/删除的方法
第一种: route add -net 172.16.6.0 netmask 255.255.255.0 gw 172.16.2.254 dev eth0 route del gw 172.1 ...
- (转)详解Linux中SSH远程访问控制
详解Linux中SSH远程访问控制 原文:http://blog.51cto.com/dengqi/1260038 SSH:是一种安全通道协议,主要用来实现字符界面的远程登录,远程复制等功能(使用TC ...
- linux中ssh登录Permanently added (RSA) to the list of known hosts问题解决
文章出自http://www.2cto.com/os/201307/227199.html linux中ssh登录Permanently added (RSA) to the list of know ...
- 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制
通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...
- .net中创建xml文件的两种方法
.net中创建xml文件的两种方法 方法1:根据xml结构一步一步构建xml文档,保存文件(动态方式) 方法2:直接加载xml结构,保存文件(固定方式) 方法1:动态创建xml文档 根据传递的值,构建 ...
- PHP中实现MySQL嵌套事务的两种解决方案
PHP中实现MySQL嵌套事务的两种解决方案 一.问题起源 在MySQL的官方文档中有明确的说明不支持嵌套事务: Transactions cannot be nested. This is a co ...
- Java中的ReentrantLock和synchronized两种锁定机制的对比
问题:多个访问线程将需要写入到文件中的数据先保存到一个队列里面,然后由专门的 写出线程负责从队列中取出数据并写入到文件中. http://blog.csdn.net/top_code/article/ ...
随机推荐
- 2.7 Rust Structs
A struct, or structure, is a custom data type that lets you name and package together multiple relat ...
- oracle name
1.db_name 数据库名 SQL> connect xys/manager as sysdba 已连接. SQL> show user USER 为 "SYS" S ...
- java使用在线api实例
字符串 strUrl为访问地址和参数 public String loadAddrsApi() { StringBuffer sb; String strUrl = "https://api ...
- java中二维数组初始化的几种方法
/* 第一种方式 */ int tdarr1[][] = { { 1, 3, 5 }, { 5, 9, 10 } }; /* 第二种方式 */ int tdarr2[][] = new int[][] ...
- java多线程2:Thread中的方法
静态方法: Thread类中的静态方法表示操作的线程是"正在执行静态方法所在的代码块的线程". 为什么Thread类中要有静态方法,这样就能对CPU当前正在运行的线程进行操作.下面 ...
- Java oop 笔记
摘要网址:http://note.youdao.com/noteshare?id=bbdc0b970721e40d327db983a2f96371
- 【kafka学习笔记】合理安排broker、partition、consumer数量
broker的数量最好大于等于partition数量 一个partition最好对应一个硬盘,这样能最大限度发挥顺序写的优势. broker如果免得是多个partition,需要随机分发,顺序IO会退 ...
- [BUUCTF]PWN——[ZJCTF 2019]EasyHeap
[ZJCTF 2019]EasyHeap 附件 步骤: 例行检查,64位程序 试运行一下看看程序大概执行的情况,经典的堆块的菜单 64位ida载入,首先检索字符串,发现了读出flag的函数 看一下每个 ...
- LuoguP6850 NOI 题解
Content 小 L 参加了 \(\texttt{NOI}\),现在他告诉你九个数 \(a,b,c,d,e,f,g,h,i\),分别表示--笔试作对的题数.D1T1.D1T2.D1T3.D2T1.D ...
- MVC中的打印功能
HTML页面: @{ Layout = "~/Views/Shared/_IframeLayout.cshtml";}@Scripts.Render(ViewBag.ScriptP ...