热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

解决OpenSSH“Error:Connectionclosedbyserverwithexitcode128”错误(ZT)

昨晚,使用FileZilla的SFTP连接UbuntuServer10.10时碰到一个诡异错误:Filezillaclient日志信息代码状态:正在连接

昨晚,使用 FileZilla 的 SFTP 连接 Ubuntu Server 10.10 时碰到一个诡异错误:

Filezilla client 日志信息 代码

  1. 状态: 正在连接 10.1.13.69... 
  2. 响应: fzSftp started 
  3. 命令: keyfile "E:\key\Bert_id_rsa.ppk"
  4. 命令: open "tdhadoop@10.1.13.69" 22
  5. 状态: Connected to 10.1.13.69
  6. 错误: Connection closed by server with exitcode 128
  7. 错误: 无法连接到服务器 

而使用 Putty 连接就没有问题,使用相同的 key 文件。这说明问题不是出现公钥密码及主机验证上,即 SSH 连接没有问题。

根据错误提示:Connection closed by server with exitcode 128 。其中 128 表示传入了无效参数,参考自 ”Exit Codes With Special Meanings “。在 OpenSSH FAQ 上没有找到答案,然后在其 FileZilla Forums 上找到一篇相关文章 ”Connection closed by server with exitcode 128 “。该文章提示使用”调试“模式运行,以便输出更多有价值错误信息。于是根据 “Logging in FileZilla ” 提示设置 Filezilla Client,日志输出如下:

Filezilla client 日志信息 代码

  1. 状态: 正在连接 10.1.13.69... 
  2. 追踪: Going to execute "F:\FileZilla FTP Client\fzsftp.exe"
  3. 响应: fzSftp started 
  4. 追踪: CSftpControlSocket::ConnectParseResponse(fzSftp started) 
  5. 追踪: CSftpControlSocket::SendNextCommand() 
  6. 追踪: CSftpControlSocket::ConnectSend() 
  7. 命令: keyfile "E:\key\Bert_id_rsa.ppk"
  8. 追踪: CSftpControlSocket::ConnectParseResponse() 
  9. 追踪: CSftpControlSocket::SendNextCommand() 
  10. 追踪: CSftpControlSocket::ConnectSend() 
  11. 命令: open "tdhadoop@10.1.13.69" 22
  12. 追踪: Looking up host "10.1.13.69"
  13. 追踪: Connecting to 10.1.13.69 port 22
  14. 追踪: Server version: SSH-2.0-OpenSSH_5.5p1 Debian-4ubuntu4 
  15. 追踪: Using SSH protocol version 2
  16. 追踪: We claim version: SSH-2.0-PuTTY_Local:_May_22_2011_19:21:03
  17. 追踪: Doing Diffie-Hellman group exchange 
  18. 追踪: Doing Diffie-Hellman key exchange with hash SHA-256
  19. 追踪: Host key fingerprint is: 
  20. 追踪: ssh-rsa 2048 6c:df:ef:0b:98:1b:7f:cb:77:23:3d:c0:ac:29:9d:fd 
  21. 追踪: Initialised AES-256 SDCTR client->server encryption 
  22. 追踪: Initialised HMAC-SHA1 client->server MAC algorithm 
  23. 追踪: Initialised AES-256 SDCTR server->client encryption 
  24. 追踪: Initialised HMAC-SHA1 server->client MAC algorithm 
  25. 追踪: Pageant is running. Requesting keys. 
  26. 追踪: Pageant has 1 SSH-2 keys 
  27. 追踪: Successfully loaded 1 key pair from file 
  28. 追踪: Trying Pageant key #0
  29. 追踪: Key matched loaded keyfile, remove duplicate 
  30. 追踪: Sending Pageant's response 
  31. 追踪: Access granted 
  32. 追踪: Opened channel for session 
  33. 追踪: Started a shell/command 
  34. 状态: Connected to 10.1.13.69
  35. 追踪: Server exited on signal "PIPE"
  36. 错误: Connection closed by server with exitcode 128
  37. 追踪: CControlSocket::DoClose(64) 
  38. 追踪: CSftpControlSocket::ResetOperation(66) 
  39. 追踪: CControlSocket::ResetOperation(66) 
  40. 错误: 无法连接到服务器 

上面日志信息的关键部分:

Log代码

  1. 追踪:    Server exited on signal "PIPE"
  2. 错误:    Connection closed by server with exitcode 128

遗憾的是,由于自己对 Linux 系统不太熟悉,还是没有解决问题。只能接着该文继续顺藤摸瓜了。

接下来,查看服务器那边的日志记录,看能否找到些关键线索。通过在 Ubuntu Documentation 上搜索 OpenSSH Server log file 找到 "OpenSSH Configuring ",知道其日志记录文件为 /var/log/auth.log 。该问题的相关日志信息如下:

/var/log/auth.log 代码

  1. Jul 24 10:39:22 tdmaster sshd[2096]: Accepted publickey for tdhadoop from 10.1.13.102 port 2740 ssh2 
  2. Jul 24 10:39:22 tdmaster sshd[2096]: pam_unix(sshd:session): session opened for user tdhadoop by (uid=0) 
  3. Jul 24 10:39:22 tdmaster sshd[2109]: subsystem request for sftp 
  4. Jul 24 10:39:22 tdmaster sshd[2096]: pam_unix(sshd:session): session closed for user tdhadoop 

从 权限认证日志中,发现 问题根源是由于子系统请求 sftp 请求导致 session 关闭。 同时,上述日志信息也验证了先前的推断:publickey 确实是正确的。再在 Google 通过上面的错误信息:“ subsystem request for sftp session closed ” 搜索,找到” Debian User Forums - OpenSSH SFTP cannot connect “,同时通过查看 Ubuntu 的启动配置脚本文件 $HOME/.bashrc 也证明 Ubuntu Server 是基于 Debian 系统实现的。 这样, 经过大约 2.5 个小时的奋斗终于把问题给解决了。 (解决问题的时间还是太长了,不是很满意,希望以后有更大的提高。该时间很大程度上取决于找资料的时间:如果我能在最短时间内找到最有用的资料,时间自然 而然地缩短了。 这也反映了我的搜索能力还差远了,需要提高很多)解决方法如下:

/etc/ssh/sshd_config 代码

  1. # 注意:SSH 还允许客户端传递系统 Locale 相关的环境变量给服务器 
  2. # Allow client to pass locale environment variables 
  3. AcceptEnv LANG LC_* 
  4. # 将 
  5. # Subsystem sftp /usr/lib/openssh/sftp-server 
  6. # 替换为 
  7. Subsystem sftp internal-sftp 

但我觉得这种解决方案不是很好,修改该配置信息可能会导致系统服务器那边不能使用 sftp 传输功能(经验证,修改前后的 sftp 功能都运行正常。参考自 sftp - OpenSSH Manualsftp manual )。况且,其它服务器的同样设置都 OK。所以,我断定根源不是由此引起的。通过观察发现,每次登录这台服务器都会输出下面信息,而其它服务器则不会:

/dev/tty 代码

  1. -bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8) 

并且从 sshd_config 配置文件可知,SSH 会接受 LC_* 环境变量,见上文。这让我猜测问题的 真正 根源 可能是 LC_ALL 设置不正确而引起的 。通过在 Ubuntu Documentation 上搜索 locale LC_ALL 找到“Environment Variables - Locale setting variables ”、“Locale - Ubuntu Documentation ”。如果设置了 LC_ALL 环境变量,它会覆盖所有 LC_* 的环境变量值。/etc/default/locale 文件内容如下:

/etc/default/locale 代码 收藏代码

  1. LANG="en_US.UTF-8"
  2. LC_ALL="en_US.UTF-8"  # 引起该问题的根源 
  3. LANGUAGE="en_US:en"

而其它服务器的 locale 文件则没有设置 LC_ALL 。

接 下来就是去掉该行,重启 ssh 服务。退出重新登录后,上面的 -bash 警告信息也没了。 教训:以后得注意了,警告也可能引起一些很难解决的问题,并且这些问题很难追踪。 再通过 FileZilla Client ,看能否访问该服务器?Ok,问题终于完美解决了。 这也验证了我上述的猜测。

重点参考资料

  1. FileZilla Forums - Connection closed by server with exitcode 128
  2. Debian User Forums - OpenSSH SFTP cannot connect
  3. Wiki - SSH File Transfer Protocol

转:https://www.cnblogs.com/ebs-blog/archive/2011/09/05/2167600.html



推荐阅读
  • 本文介绍了使用数据库管理员用户执行onstat -l命令来监控GBase8s数据库的物理日志和逻辑日志的使用情况,并强调了对已使用的逻辑日志是否及时备份的重要性。同时提供了监控方法和注意事项。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • PatchODAX8: ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • iOS超签签名服务器搭建及其优劣势
    本文介绍了搭建iOS超签签名服务器的原因和优势,包括不掉签、用户可以直接安装不需要信任、体验好等。同时也提到了超签的劣势,即一个证书只能安装100个,成本较高。文章还详细介绍了超签的实现原理,包括用户请求服务器安装mobileconfig文件、服务器调用苹果接口添加udid等步骤。最后,还提到了生成mobileconfig文件和导出AppleWorldwideDeveloperRelationsCertificationAuthority证书的方法。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
  • Linux下安装免费杀毒软件ClamAV及使用方法
    本文介绍了在Linux系统下安装免费杀毒软件ClamAV的方法,并提供了使用该软件更新病毒库和进行病毒扫描的指令参数。同时还提供了官方安装文档和下载地址。 ... [详细]
  • hadoop1.2.1文档中这样写:Nowcheckthatyoucansshtothelocalhostwithoutapassphrase:$sshlocalhostIfyou ... [详细]
author-avatar
风云变幻1892_602
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有