2020-12-08centos 出现ssH不能连接的故障排除

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020-12-08centos 出现ssH不能连接的故障排除相关的知识,希望对你有一定的参考价值。

参考技术A 连接出现remote side unexpected closed network-connection错误
1查看防火墙状态

查看是否开启,并检查22端口是否允许连接
如果防火墙正常,则应该是SSHd没有启动,如果可以直接到服务器上操作,那就可以用

我里机房有点远,所以用另一种方法解决了,服务器里安装了宝塔面板,于是就找到了系统日志进行错误的查看。系统日志路径
/var/log/messages 在日志文件里就能看到ssh启动过程中的错误了

通过以上错误日志可以看到 ssh_host_ecdsa_key文件权限太高了,系统提示错误导致ssh不能正常启动,所以按照提示,将ssh目录下的文件权限改为600,重启ssh问题解决。

无法使用 SSH.NET 库连接到 AIX(Unix) 框 - 错误:值不能为空

【中文标题】无法使用 SSH.NET 库连接到 AIX(Unix) 框 - 错误:值不能为空【英文标题】:Unable to connect to AIX(Unix) box with SSH.NET Library - Error : Value cannot be null 【发布时间】:2013-03-19 03:40:15 【问题描述】:

我正在尝试连接到 AIX 机器并使用 SSH.NET 库执行一些命令。 以下是代码片段

KeyboardInteractiveAuthenticationMethod kauth = new KeyboardInteractiveAuthenticationMethod(username);
PasswordAuthenticationMethod pauth = new PasswordAuthenticationMethod(username, password);

ConnectionInfo connectionInfo = new(ConnectionInfo(servername, 22, username, pauth,kauth);
SshClient sshClient = new SshClient(connectionInfo);
sshClient.Connect();
SshCommand sshCommand = sshClient.RunCommand("mpstat");
Console.WriteLine(sshCommand.Result);
Console.ReadKey();

当我尝试在sshClient.Connect() 行连接时收到以下异常消息

"值不能为空。\r\n参数名称:数据"

堆栈跟踪是

   at Renci.SshNet.KeyboardInteractiveAuthenticationMethod.Authenticate(Session session)
   at Renci.SshNet.ConnectionInfo.Authenticate(Session session)
   at Renci.SshNet.Session.Connect()
   at Renci.SshNet.BaseClient.Connect()

我确信我通过的凭据是有效的,因为我能够使用具有相同凭据的 PuTTY 客户端登录。有什么想法吗?

【问题讨论】:

【参考方案1】:

经过一番研究,我找到了解决方案。希望它可以帮助其他人。

应使用键盘交互式身份验证,并应使用以下函数覆盖AuthenticationPrompt事件

void HandleKeyEvent(Object sender, AuthenticationPromptEventArgs e)

    foreach (AuthenticationPrompt prompt in e.Prompts)
    
        if (prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) != -1)
        
            prompt.Response = password;
        
    

函数调用代码:

KeyboardInteractiveAuthenticationMethod kauth = new KeyboardInteractiveAuthenticationMethod(username);
PasswordAuthenticationMethod pauth = new PasswordAuthenticationMethod(username, password);

kauth.AuthenticationPrompt += new EventHandler<AuthenticationPromptEventArgs>(HandleKeyEvent);

ConnectionInfo connectionInfo = new ConnectionInfo(serverName, port, username, pauth, kauth);

sshClient = new SshClient(connectionInfo);
sshClient.Connect();

【讨论】:

【参考方案2】:

我已经封装了整个东西,以便更容易使用。警告:尚未实施任何尝试/捕获! DLL 可在此处获得:https://sshnet.codeplex.com/releases/view/120504 使用 SLES (11.1 64)、Debian (6)、AIX (5.3, 6.1, 7) 测试

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Renci.SshNet;
using Renci.SshNet.Common;

namespace SSH2

    public partial class Form1 : Form
    
        public Form1()
        
            InitializeComponent();

            SSH client = new SSH("servername", "username", "password");

            MessageBox.Show(client.command("ls -la /"));
        

    

    public class SSH
    
        string servername;
        int port;
        string username;
        string password;

        SshClient Server = null;


        public SSH(string servername, int port, string username, string password)
        
            this.servername = servername;
            this.port = port;
            this.username = username;
            this.password = password;

            this.init();
        

        public SSH(string servername, string username, string password)
        
            this.servername = servername;
            this.port = 22;
            this.username = username;
            this.password = password;

            this.init();
        


        private void init()
        
            KeyboardInteractiveAuthenticationMethod kauth = new KeyboardInteractiveAuthenticationMethod(this.username);
            PasswordAuthenticationMethod pauth = new PasswordAuthenticationMethod(this.username, this.password);

            kauth.AuthenticationPrompt += new EventHandler<AuthenticationPromptEventArgs>(HandleKeyEvent);

            this.Server = new SshClient(new ConnectionInfo(this.servername, this.port, this.username, pauth, kauth));
        


        void HandleKeyEvent(Object sender, AuthenticationPromptEventArgs e)
        
            foreach (AuthenticationPrompt prompt in e.Prompts)
            
                if (prompt.Request.IndexOf("Password:", StringComparison.InvariantCultureIgnoreCase) != -1)
                
                    prompt.Response = this.password;
                
            
        

        public string command(string cmd)
        
            this.Server.Connect();

            var output = this.Server.RunCommand(cmd);

            this.Server.Disconnect();

            return output.Result;
        
    

【讨论】:

以上是关于2020-12-08centos 出现ssH不能连接的故障排除的主要内容,如果未能解决你的问题,请参考以下文章

CentOS7使用ssh不能登录,报错:Read from socket failed: Connection reset by peer

Putty连接Centos7各种连不上问题的解决方案

使用 SSH 密钥连接到远程 Centos 服务器

ssh连接到centos主机,无法成功连接,报错如下,求大侠赐教!!感谢!!

如何使用 SSH 连接到你的云服务器

无法通过 SSH 连接到 Windows 8 上的 vagrant CentOS box