你还在为SFTP连接超时而困惑么?
1. 前言
在最近的项目联调过程中,发现在连接上游侧SFTP时总是需要等待大约10s+的时间才会出现密码输入界面,这种长时间的等待直接导致的调用文件接口时连接sftp超时问题。于是决定自己针对该问题进行一下排查,查询了相关资料,并逐个试验了一下网上提供的解决方案,然后在文章中详细记录问题的排查及分析过程,并将收集到的一些常见的SFTP的超时原因及解决方案进行了整理如下。

2. 问题排查过程
- 首先使用ssh -v命令(调试模式)进行远程登录调试:
ssh -v -oPort=端口号 root@ip地址

- 在调试模式观察调试信息,确定主要的耗时卡点所在位置

- 根据耗时卡点信息确认问题所属服务端还是客户端;
◦ 假如调试信息卡在debug1: SSH2_MSG_SERVICE_ACCEPT received位置,则表示主要的耗时卡点在服务端,需要修改服务端的配置文件();
◦ 假如调试信息卡在debug1: Next authentication method: gssapi-with-mic 位置,则表示主要的耗时卡点在客户端,需要修改服务端的配置文件();
◦ 假如两个阶段停留时间均较长,则需要同时修改服务端和客户端的配置文件;

- 经排查发现此次SFTP连接超时的调试信息在debug1: SSH2_MSG_SERVICE_ACCEPT received位置停留时间较长,故而需要修改服务端的配置文件,需要调整文件如下:
◦ 关闭DNS反向解析:在Linux中,默认是开启了SSH的反向DNS解析,服务器会先根据客户端的 IP地址进行 DNS PTR反向查询出客户端的主机名,然后根据查询出的客户端主机名进行DNS正向A记录查询,并验证是否与原始 IP地址一致,通过此种措施来防止客户端欺骗(说到底还是反向查询的问题)。这个会消耗大量时间,是连接慢的主要卡点,因此可以通过关闭该选项;
配置文件位置:
/etc/ssh/sshd_config

需要修改选项
UseDNS no

◦ 关闭GSSAPI认证:服务器端启用了GSSAPI。登陆的时候客户端需要对服务器端的IP地址进行反解析,如果服务器的IP地址没有配置PTR记录,那么就容易在这里卡住了。
配置文件位置同DNS选项文件,具体修改内容:
GSSAPIAuthentication no

◦ 【未尝试该方案】nsswitch;修改配置文件nsswitch中hosts选项;修改“hosts”选项,hosts: files dns 表示是对于访问的主机进行域名解析的顺序,是先访问file,也就是/etc/hosts文件,如果hosts中没有记录域名,则访问dns进行域名解析。如果dns也无法访问,就会等待访问超时后返回,因此等待时间比较长。注意:如果SERVER需要通过域名访问其他服务器,则需要保留此行。
nsswitch文件位置:
/etc/nsswitch.conf

具体修改内容为:(注意:如果SERVER需要通过域名访问其他服务器,则需要保留此行。ps:二次强调)
hosts: files
◦ 【未尝试该方案】目标主机hosts:修改目标主机的/etc/hosts文件,将本地主机的IP和Hostname添加进去;
◦ 修改IgnoreRhosts选项:IgnoreRhosts参数可以忽略以前登录过主机的记录,设置为yes后可以极大的提高连接速度;
文件位置:
/etc/ssh/sshd_configIgnoreRhosts
具体修改为:
sshd_configIgnoreRhosts yes
- 最后执行/etc/init.d/sshd restart重启sshd进程使上述配置生效即可,通过关闭配置文件中DNS反向解析和GSS认证确实可以有效提升SFTP连接速度;那么问题来了?
◦ 为什么需要修改这两个选项呢?
◦ 修改这两个选项会带来什么样的风险么?
◦ 带着这几个问题我们对DNS反向解析和GSS认证继续进行调研=======
3. 知识扩展
3.1. 什么是DNS反向解析?

DNS 的用途通常是将 域名解析 为 IP 地址。这被称为正向解析,我们每次访问互联网上的站点时都会执行此操作。顾名思义,反向 DNS(或rDNS)是一种将 IP 地址解析为域名的方法。
3.2. 反向DNS的查找过程?
在Windows中使用nslookup或者ping -a命令,在Linux中手动执行rDNS查找命令为:
dig -x ip地址
3.3. 什么是GSS认证?
GSSAPI – Generic Security Services Application Program Interface,它是另一个身份认证框架,基于这个框架也有多种认证机制的实现,如Kerberos,NTLM,SPNEGO等,但最为人所熟知还是Kerberos5的实现,所以会有很多人把“GSSAPI”等同于“Kerberos认证”。GSSAPI的程序库是cyrus-sasl-gssapi,它需要依赖SASL的共享程序库cyrus-sasl-lib。
举个栗子==>
客户端连接到服务器说:“Hi,我要登录,我支持SASL,请问我要如何证明自己的身份?”
服务器收到连接并作出响应:“收到,我也支持SASL,具体来说支持如下几种SASL认证实现:PLAIN,CRAM-MD5,GSSAPI,…”
客户端回答:“我想使用其中的GSSAPI。”
服务器响应: “收到。你知道GSSAPI也是一个认证框架,在GSSAPI方式下,具体来说我又支持:Kerberos5,SPNEGO,…”
客户端回复:“让我们使用Kerberos5吧,给你我的加密票据…”
◦ 在什么是GSS认证的例子中引入了一个新的名词(SASL),那么什么是SASL?
SASL – Simple Authentication and Security Layer,中文译作:“简单认证与安全层”,它是一个在网络协议中用来认证和数据加密的构架。SASL的官方定义非常抽象,很难让人直接明白它是做什么的。实际上,我们可以把SASL理解为一个用于身份认证(Athentication)的编程框架或者是一组接口定义,不同的认证机制可以基于这个框架编写各自的实现,从而允许客户端和服务器之间通过协商选出一种共同支持的认证机制完成身份认证。引入SASL后,应用系统不必再针对某一种认证机制去硬编码,而是具备了认证机制的可插拔能力;对于应用系统的开发者而言,使用SASL可以避免从一种认证机制的最底层API开始编写实现方案,将精力集中在与SASL框架的集成上即可,因为与各种认证机制对接的细节都已由相应的SASL插件实现了。作为SASL最主流的实现Cyrus SASL,其官方文档列出了大量开箱即用的插件: https://www.cyrusimap.org/sasl/#features 。SASL由共享程序库cyrus-sasl-lib和若干面向特定认证机制的实现库,如:cyrus-sasl-plain,cyrus-sasl-gssapi等组成。
emm,已经开始逐渐复杂啦,总结就是GSSAPI认证只是一种安全框架和接口标准,具体更深入的相关知识后续学习下再另起一篇文章进行总结哈!
4. 总结
跟着网上给出的解决方法逐个进行验证倒是没有什么难度,比较烧脑的是其中所涉及到的各种修改的原因以及如何根据现有问题定位到去修改该配置。文中涉及到的GSSAPI认证在今天之前完全是一个陌生的概念,现在通过查询资料也只是有了一个浅层的概念认知,后续还需要对文中所引入的相关知识及问题再深入学习!ok,以上就是对今天的SFTP连接超时问题进行了排查分析,是一次总结也是一次分享。
作者:京东科技 宋慧超
来源:京东云开发者社区 转载请注明来源
你还在为SFTP连接超时而困惑么?的更多相关文章
- SSRS报表连接超时的问题
这段时间遇到一个问题就是ReportService 中采用了远程连接的报表偶尔会断开连接,导致报表导出异常,查阅了很多资料,几天来就是断断续续的终于解决了这个问题,下面把一些解决的点一一展示出来,便于 ...
- (转)hbase master挂掉-zookeeper连接超时原因
link:http://www.51testing.com/?uid-445759-action-viewspace-itemid-812467 并行运行hbase删表,建表操作,多个表多个regio ...
- HttpClient(二)HttpClient使用Ip代理与处理连接超时
前言 其实前面写的那一点点东西都是轻轻点水,其实HttpClient还有很多强大的功能: (1)实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等) (2)支持自动转向 (3)支持 ...
- nginx——优化 Nginx 连接超时时间
1. 什么是连接超时 (1) 举个例子,某饭店请了服务员招待顾客,但是现在饭店不景气,因此要解雇掉一些服务员,这里的服务员就相当于 Nginx 服务建立的连接 (2) 当服务器建立的连接没有接收处理请 ...
- 分享今天在客户那里遇到的SQLSERVER连接超时以及我的解决办法
分享今天在客户那里遇到的SQLSERVER连接超时以及我的解决办法 客户的环境:SQLSERVER2005,WINDOWS2003 SP2 32位 这次发生连接超时的时间是2013-8-5 21: ...
- (五)HttpClient 连接超时及读取超时
第一节: HttpClient 连接超时及读取超时 HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接 ...
- 使用ffmpeg的av_read_frame,如何控制连接超时
最近使用ffmpeg来做一个rtsp的客户端,这过程也遇到不少问题,不过相应都比较好,一路走下来.不过到项目结尾时,且遇到一个比较纠结的问题.那就是客户端在使用的过程中,把rtsp服务器的网断了.这时 ...
- HttpClient连接超时及读取超时
HttpClient连接超时及读取超时 httpClient在执行具体http请求时候 有一个连接的时间和读取内容的时间: HttpClient连接时间 所谓连接的时候 是HttpClient发送请求 ...
- 基于ORA-12170 TNS 连接超时解决办法详解
转自原文 基于ORA-12170 TNS 连接超时解决办法详解 1.开始----程序-----Oracle------配置和移植工具-----Net Manager----本地----服务命名---o ...
- 连接超时(connect timed out)和读取超时(Read timed out)
设置连接超时和读取超时方法: RequestConfig config=RequestConfig.custom() .setConnectTimeout(10000) // 设置连接超时时间 10秒 ...
随机推荐
- Variable 'xxxx' is accessed from within inner class, needs to be final or effectively final-Lambda 表达式的变量与作用域
问题的原因 问题代码: public static void main(String[] args) { Integer sum = 0; Integer count = 0; List<Int ...
- RocketMq消费原理及源码解析
消费原理概览 先简单说下常见的rocketMq的部署方式,上图中broker为真正计算和存储消息的地方,而nameServer负责维护broker地 图中右侧consume message部分即是本文 ...
- 查看Linux系统下CPU、内存、硬盘等信息
做个记录,方便日后查看使用. 1. 查看CPU 1.1 查看CPU个数 [root@qy-ggyf-zyl-31 ~]# cat /proc/cpuinfo | grep "physical ...
- Hugging News #0814: Llama 2 学习资源大汇总 🦙
每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新.社区活动.学习资源和内容更新.开源库和模型更新等,我们将其称之为「Hugging Ne ...
- 通过WinSW部署JAR包为windows服务
通过WinSW部署JAR包为windows服务 背景 使用 Java 编写了一些有用的工具,因为不方便部署到服务器上,所以需要把 Java 生成的 jar 包在本地 Windows 上部署. 查阅了几 ...
- Excelize 开源基础库 2.8.0 版本正式发布
Excelize 是 Go 语言编写的用于操作电子表格办公文档的开源基础库,基于 ISO/IEC 29500.ECMA-376 国际标准.可以使用它来读取.写入由 Microsoft Excel.WP ...
- Go,从命名开始!Go的关键字和标识符全列表手册和代码示例!
关注TechLeadCloud,分享互联网架构.云服务技术的全维度知识.作者拥有10+年互联网服务架构.AI产品研发经验.团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师, ...
- 《Python魔法大冒险》008 石像怪的挑战:运算符之旅
小鱼和魔法师继续深入魔法森林.不久,他们来到了一个巨大的魔法石圈旁边.石圈中心有一个闪闪发光的魔法水晶,周围则是一些神秘的符号.但令人意外的是,水晶的旁边还有一个巨大的石像怪,它的眼睛散发着红色的光芒 ...
- 银河麒麟使用kickstart二次打包制作安装镜像ISO
系统:银河麒麟 V10 SP2 服务器:百信恒山 TS02F-F30 安装方式:服务器挂载ISO镜像进行安装 1.安装 mkisofs 软件包: #yum install genisoimage 2. ...
- Asp-Net-Core开发笔记:FrameworkDependent搭配docker部署
前言 之前我写过一篇使用 docker 部署 AspNetCore 应用的文章,这种方式搭配 CICD 非常方便, build 之后 push 到私有的 dockerhub ,在生产服务器上 pull ...