你还在为SFTP连接超时而困惑么? | 京东云技术团队
1. 前言
在最近的项目联调过程中,发现在连接上游侧SFTP时总是需要等待大约10s+的时间才会出现密码输入界面,这种长时间的等待直接导致的调用文件接口时连接sftp超时问题。于是决定自己针对该问题进行一下排查,查询了相关资料,并逐个试验了一下网上提供的解决方案,然后在文章中详细记录问题的排查及分析过程,并将收集到的一些常见的SFTP的超时原因及解决方案进行了整理如下。
2. 问题排查过程
- 首先使用ssh -v命令(调试模式)进行远程登录调试:
ssh -v -oPort=端口号 root@ip地址
- 在调试模式观察调试信息,确定主要的耗时卡点所在位置
- 根据耗时卡点信息确认问题所属服务端还是客户端;
- 经排查发现此次SFTP连接超时的调试信息在debug1: SSH2_MSG_SERVICE_ACCEPT received位置停留时间较长,故而需要修改服务端的配置文件,需要调整文件如下:
配置文件位置:
/etc/ssh/sshd_config
需要修改选项
UseDNS no
配置文件位置同DNS选项文件,具体修改内容:
GSSAPIAuthentication no
nsswitch文件位置:
/etc/nsswitch.conf
具体修改内容为:(注意:如果SERVER需要通过域名访问其他服务器,则需要保留此行。ps:二次强调)
hosts: files
文件位置:
/etc/ssh/sshd_configIgnoreRhosts
具体修改为:
sshd_configIgnoreRhosts yes
- 最后执行/etc/init.d/sshd restart重启sshd进程使上述配置生效即可,通过关闭配置文件中DNS反向解析和GSS认证确实可以有效提升SFTP连接速度;那么问题来了?
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吧,给你我的加密票据…”
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连接超时问题进行了排查分析,是一次总结也是一次分享。
作者:京东科技 宋慧超
来源:京东云开发者社区 转载请注明来源

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Android发热监控实践
一、背景 相信移动端高度普及的现在,大家或多或少都会存在电量焦虑,拥有过手机发热发烫的糟糕体验。而发热问题是一个长时间、多场景的指标存在,且涉及到端侧应用层、手机 ROM 厂商系统、外界环境等多方面的影响。如何有效衡量发热场景、定位发热现场、以及归因发热问题成为了端侧应用层发热监控的面前的三座大山。本文通过得物 Android 端侧现有的一些监控实践,不深入功耗计算场景无法自拔,优先聚焦于发热场景本身,希望能给大家一些参考。 二、发热定义 温度是最直观能反映发热问题的指标,当前 Android 侧,我们以体感温度 37° 以上作为分界线,向上每 3° 作为一个发热温度区间,区间细分上限温度 49° ,即划分出 37-40,40-43,43-46,46-49,49+ 五个等级。 以手机温度、CPU 使用率作为第一、第二要素来判断用户是否发热的同时,获取其他参数来支撑发热现场情况。 具体指标如下: 手机温度 CPU 使用率、GPU 使用率; 线程堆栈; 系统服务使用频次; 设备前后台、亮灭屏时长; 电量、充电情况; 热缓解发热等级; 系统机型、版本; .... 三、指标获取 温度 电池温度...
- 下一篇
从 SQL 查询优化技巧去看 h2 数据库查询原理 | 京东物流技术团队
本文目标是:了解查询的核心原理,对比 SQL 查询优化技巧在 h2database 中的落地实现。 前提:为了贴近实际应用,本文 Code Insight 基于 BTree 存储引擎。 数据查询核心原理 数据库实现查询的原理:遍历表/索引,判断是否满足where筛选条件,添加到结果集。简单通用。 对于选择表还是索引、如何遍历关联表、优先遍历哪个表、怎样提升遍历的效率,这个就是数据库查询复杂的地方。 /** * 查询命令实现查询的主要过程 * @see org.h2.command.dml.Select#queryFlat */ private void queryFlat(int columnCount, ResultTarget result, long limitRows) { // 遍历单表 or 关联表。topTableFilter 可以简单理解为游标 cursor。 while (topTableFilter.next()) { // 判断是否符合 where 筛选条件 if (condition == null || Boolean.TRUE.equals(...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS关闭SELinux安全模块
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS6,CentOS7官方镜像安装Oracle11G
- Docker安装Oracle12C,快速搭建Oracle学习环境
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作