断开没有正常结束的SSH远程连接

当远程连接没有正常exit退出,而是直接关闭终端。那么服务器端的SSH连接实际上并没有结束,当连接数超过一定数量时(默认10个),就会产生错误:
ssh_exchange_identification: read: Connection reset by peer

这里讲怎么断开没有正常结束的SSH连接。
当一个SSH连接过N个小时没有数据传输后,会自动结束,但我们不想等几个小时。
方法:

# linux shell
w   # 查看当前登录的用户信息
who am i  # 查看当前是那个连接,别把当前连接kill了
ps -aux |grep userxxxx   # 这里userxxxx是你的登录名,这个命令可以看到不需要的连接的进程号
kill 23423   # 比如要结束23423进程
w  # 看不需要的登录用户是否被杀死了
netstat -nat | grep -i 22   # 看22端口还有哪些连接。  

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

### 回答1: 使用 C 语言来进行 SSH 连接需要使用一些第三方库,比如 libssh 或者 libssh2。 你可以使用这些库提供的 API 函数来连接远程主机,执行命令,传输文件等等。 下面是一个示例代码,用来连接远程主机,执行命令并打印输出(使用的是 libssh 库): ``` #include <stdio.h> #include <stdlib.h> #include <libssh/libssh.h> int main() { ssh_session session; int rc; // 创建一个 SSH 会话 session = ssh_new(); if (session == NULL) { fprintf(stderr, "Error creating SSH session\n"); exit(-1); } // 设置服务器地址和端口 ssh_options_set(session, SSH_OPTIONS_HOST, "example.com"); ssh_options_set(session, SSH_OPTIONS_PORT, 22); // 连接服务器 rc = ssh_connect(session); if (rc != SSH_OK) { fprintf(stderr, "Error connecting to server: %s\n", ssh_get_error(session)); ssh_free(session); exit(-1); } // 验证服务器的身份 rc = ssh_userauth_publickey_auto(session, NULL, NULL); if (rc != SSH_AUTH_SUCCESS) { fprintf(stderr, "Error authenticating with server: %s\n", ssh_get_error(session)); ssh_disconnect(session); ssh_free(session); exit(-1); } // 执行命令并打印输出 ssh_channel channel; channel = ssh_channel_new(session); if (channel == NULL) { fprintf(stderr, "Error creating channel\n"); ssh_disconnect(session); ssh_free(session); exit(-1); } rc = ssh_channel_open_session(channel); if (rc != SSH_OK) { fprintf(stderr, "Error opening channel: %s\n", ssh_get_error(session)); ssh_channel_free(channel); ssh_disconnect(session); ssh_free( ### 回答2: 要使用C语言进行SSH连接,可以使用开源的libssh库。这个库提供了一系列的功能和API,用于建立SSH连接、进行身份验证、执行远程命令等操作。 在使用libssh库之前,需要先安装该库,并添加相关的头文件和链接库的路径。安装步骤可根据具体操作系统和编译环境来进行。 连接SSH服务器的基本步骤如下: 1. 创建一个ssh_session对象,并使用ssh_new()函数进行初始化。 2. 设置ssh_session对象的相关属性,如远程主机的IP地址、端口号、用户名、密码等。可以使用ssh_options_set()函数来设置这些属性。 3. 调用ssh_connect()函数连接到远程主机。如果连接成功,则会返回一个值为SSH_OK的整数。 4. 如果需要进行身份验证,可以使用ssh_userauth_password()函数进行密码验证。如果使用密钥进行验证,可以使用ssh_userauth_publickey_auto()函数。 5. 连接成功后,可以使用ssh_channel_open_session()函数打开一个会话通道。 6. 调用ssh_channel_request_exec()函数执行远程命令。可以使用ssh_channel_read()函数读取命令的输出,并使用ssh_channel_send_eof()函数发送结束标志。 7. 执行完命令后,可以使用ssh_channel_free()函数释放会话通道。 8. 最后,使用ssh_disconnect()函数断开与远程主机的连接,并使用ssh_free()函数释放ssh_session对象。 需要注意的是,使用libssh库进行SSH连接需要一定的C语言基础和网络编程知识。在实际使用中,还需要处理错误和异常,以确保连接和执行命令的成功。 以上是使用C语言进行SSH连接的基本步骤,具体代码和功能可根据实际需求进行扩展和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值