SSHD的key_read报错的解决方法

本文描述了一次Xshell连接服务器时出现的异常情况,并详细记录了排查过程。通过检查known_hosts及authorized_keys文件,最终发现并修复了密钥被错误分割的问题。

现状描述

在下午发现我的Xshell到服务器节点的连接莫名其妙的断掉,查看系统日志发现出现大量的一下报错:

May 15 17:58:08 yanta sshd[15213]errorkey_read: uudecode AAAAB3NzaC1yc2...........

解决方法

在查询网络上的解决方法后,发现在/root/.ssh/known_hosts文件中可以找到出错的IP及对应报错信息中的字符串,
将其删除就可以了,但是再查看过该服务器上的信息后发现根本没有对应的,编码字符串完全不一样。

之后查看/root/.ssh/authorized_keys发现其中的一个key与报错信息一致,于是首先备份该文件:

# cp authorized_keys authorized_keys.bk

然后仔细查看这个key后发现,本来一个完整的key被人分割成几部分,导致ssh登陆时密钥不完整,于是重新复制粘贴本机上的密钥信息后没有再出现报错信息。

`libssh2_session_handshake`报错`Timed out waiting on socket`且错误代码为 -9,通常意味着在进行 SSH 握手时,等待套接字响应超时,以下是一些可能的解决办法: #### 网络方面 - **检查网络连接**:确保客户端与 SSH 服务器之间的网络连接正常,可使用`ping`命令测试网络连通性,使用`telnet`命令测试 SSH 服务器端口是否开放。例如,若 SSH 服务器端口为 22,可使用`telnet <服务器 IP> 22`命令进行测试。 - **检查防火墙和代理**:确认防火墙没有阻止 SSH 流量,或者检查代理设置是否正确。若使用防火墙,需确保允许客户端与 SSH 服务器之间的 22 端口通信;若使用代理,需检查代理配置是否正确。 #### 服务器方面 - **检查服务器负载**:若 SSH 服务器负载过高,可能导致响应缓慢或超时。可通过登录服务器,使用`top`、`htop`等命令检查服务器的 CPU、内存等资源使用情况。 - **检查服务器配置**:确保 SSH 服务器的配置正确,例如协议版本、算法等设置与客户端兼容。可检查服务器的 SSH 配置文件(通常为`/etc/ssh/sshd_config`),确保配置无误。 #### 代码方面 - **调整超时设置**:在代码中适当调整超时时间,避免因等待时间过短而导致超时。以下是一个简单的示例代码,展示了如何设置超时时间: ```c #include <libssh2.h> #include <stdio.h> #include <string.h> #include <time.h> #define TIMEOUT_SECONDS 30 int main() { LIBSSH2_SESSION *session; libssh2_socket_t socket; // 初始化libssh2库 libssh2_init(0); // 创建新的会话对象 session = libssh2_session_init(); if (!session) { fprintf(stderr, "Failed to initialize libssh2 session\n"); return 1; } // 假设socket已经正确创建和连接 // socket = ...; time_t start_time = time(NULL); int rc; while (1) { rc = libssh2_session_handshake(session, socket); if (rc == 0) { break; } if (time(NULL) - start_time > TIMEOUT_SECONDS) { char errmsg[1024]; int errlen = libssh2_session_last_error(session, errmsg, sizeof(errmsg), 0); fprintf(stderr, "SSH handshake timed out: %.*s\n", errlen, errmsg); break; } // 可以添加适当的延时,避免CPU占用过高 // sleep(1); } // 清理资源 libssh2_session_free(session); libssh2_exit(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值