该问题来自社区帖: https://bbs.csdn.net/topics/614413739
一、问题描述
某次,业务人员反馈,某主机ssh无法登陆,检查发现ssh连接直接报Connection closed by foreign host,后自动断开,VNC登录后重启sshd服务失败;报错如下:

二、分析处理
根据报错,执行:sshd -t,报错如下:
![]()
通过以上,可判断该目录权限过大导致了服务安全排斥;修改/var/run/sshd/目录权限为754,重启服务,正常。

一、问题描述
某次,业务人员反馈,某主机ssh无法登陆,检查发现ssh连接直接报Connection closed by foreign host,后自动断开,VNC登录后重启sshd服务失败;报错如下:

二、分析处理
根据报错,执行:sshd -t,报错如下:
![]()
通过以上,可判断该目录权限过大导致了服务安全排斥;修改/var/run/sshd/目录权限为754,重启服务,正常。

关注主要思路是利用SSH的端口远程转发功能,将现场客户机的远程桌面端口、或者Teamviewer端口转发到服务器指定端口,此时远程服务器即实现远程到现场。
本文的目的是想聊聊端口转发在物联网项目上的实际应用,端口转发的命令很简单,网上资料也很多,此处不再赘述。
比如现场安装了OpenSSH后,执行如下命令,密码确认通过后即可打开端口转发。
ssh -C -g -NR 13389:127.0.0.1:9880 Administrator@192.168.1.240
直接通过SSH命令打开或关闭端口转发,都必须有人在现场机上操作,既不方便,也不现实。我想实现无人值守,有问题能够及时远程,不需要人工干预。只能从程序角度出发,改造现有与Iot平台通讯的MQTT程序,增加远程端口转发参数的下发与响应,即可实现通过Iot平台打开或关闭指定设备的端口转发功能。
使用OpenSSH有个问题,需要两个步骤,先执行转发命令,再输入密码确认通过后,端口转发才真正打开。经测试无法在C#里通过Process实现密码的输入,看来这条路走不下去了。
后来想到既然使用微软全家桶开发,何不在Nuget上找找有没有相应的开发库呢?于是根据下载量找到了SSH.NET这个库,没有详细的文档,看了下Demo,用法很简单,不清楚有没有别的坑,但可以满足我的需求。