Не удается подключиться к SshClient в C# - ошибка Renci.Ss hNet - PullRequest
2 голосов
/ 10 января 2020

Я работаю в C# и пытаюсь использовать Renci.Ss hNet для создания соединения, чтобы я мог запускать команды S SH на устройстве в моей сети. Раньше все отлично работало в программе, но когда я пытаюсь создать соединение и соединить его с ошибками, а try-catch выдает это сообщение об ошибке

System. Net .Sockets.SocketException (0x80004005) : Попытка подключения не удалась, потому что подключенная сторона не ответила должным образом через некоторое время, или не удалось установить соединение, так как подключенный хост не смог ответить
в Renci.Ss hNet .Abstractions.SocketAbstraction.Connect (IPEndPoint remoteEndpoint, TimeSpan connectTimeout)
в Renci.Ss hNet .Session.Connect () в Renci.Ss hNet .BaseClient.
в Renci.Ss *1044* .Session.Connect (). Подключите ()
в SAS.JuniperCTPDriver.RemoveBundle (String IPAddr, Int32 bundleNum) в D: \ Devices \ Juniper - CTP \ Код драйвера C # \ JuniperCTPDriver.cs: строка 1028

Обновление после попытки исправить это больше.

Другое выдаваемое сообщение об ошибке:

Система. Net .Sockets.SocketE xception (0x80004005): Запрошенный адрес недопустим в своем контексте
в Renci.Ss hNet .Abstractions.SocketAbstraction.Connect (IPEndPoint remoteEndpoint, TimeSpan connectTimeout)
в Renci.Ss hNet .Session. SocketConnect (хост String, порт Int32)
в Renci.Ss hNet .Session.Connect ()
в Renci.Ss hNet .BaseClient.Connect ()
в SAS.JuniperCTPDriver.tuneJuniper ( Строка destIP, Int32 destBundle, Строка destName, Строковое устройство, Строка srcIP, Int32 srcBundle, Строка srcName, Строка srcInfo, Строка srcCircIDs, Строка destCircIDs, Строка newBundles, Драйвер Int32 srcOldBndl \ Intl \ DTP в папке Jun: DI_DIPSD_IND_IND_DINS_DINS_DINS_DINS_IND_DINS_DINS_IND_IND_DINS_IND_IND_IND_IND_IND_IND_IND_IND_IND_IND_DINS_IND_IND: in_d_D_D_IND: in_DB: Код C # \ JuniperCTPDriver.cs: строка 1074

Если у кого-то есть понимание этой проблемы, оно будет очень признательно.

string srcIP = "FD52:A651:105:40::503";
string destIP = "an IPv6 address like the first";
int srcBundle = 1;
int destBundle = 3;
int rSrcCircID = -1;
string srcName = "se-0/0";
string destName = "se-0/1";
//make sure that any already set up connections are removed
if (rSrcCircID <= -1) {
    bool res = RemoveBundle(srcIP, srcBundle);
    if (!res) {
        Console.WriteLine("was not able to remove old connection");
    }                
}


//create the bundles if they do not exist yet
if (newSrcBndl == "y")
{
    CreateBundle(srcIP, srcBundle, srcName);
}

if (newDestBndl == "y")
{
    CreateBundle(destIP, destBundle, destName);
}


using (var destClient = new SshClient(destIP, "usrname", "pw"))
{

    destClient.Connect(); //THIS IS LINE 1074

    //set bundle direction for the destination
    result = ExecuteSSHCommand(destClient, "cmd bndl " + destBundle + " cfg flags simplex_dst");
    if (result == "false")
    {
        LogMsg(3, "-- destination direction flag set failed.");
        return "failed3";
    }

.
.
.

    destClient.Disconnect();
}

Поскольку первая ошибка происходит именно в client.Connect (); оператор.

private static bool RemoveBundle(string IPAddr, int bundleNum) {
    try {
        using (var client = new SshClient(IPAddr, "ctp_cmd", "ctp_cmd")) {
            string result;
            Console.WriteLine("in using section for RemoveBundle");
            client.Connect(); //ERROR IS HERE
            Console.WriteLine("after connect to SSH client");

            //make sure that any already set up connections are removed
            result = ExecuteSSHCommand(client, "cmd bndl " + bundleNum + " disable");
            Console.WriteLine("after first ExecuteSSHCommand");
            result = ExecuteSSHCommand(client, "cmd bndl " + bundleNum + " delete");
            if (result == "false") {
                LogMsg(3, "-- source bundle deletion failed.");
                return false;
            }

            client.Disconnect();
        }

    } catch (Exception ex) {
        Console.WriteLine("RemoveBundle function error: \n" + ex);
        return false;
    }

    return true;
} //end function RemoveBundle

Другая функция, на которую отправляются все команды S SH, выглядит следующим образом

private static string ExecuteSSHCommand(SshClient s, string scmd) {
    try {
        var command = string.Format(scmd);
        var cmd = s.CreateCommand(command);
        var result = cmd.Execute();

        return result;
    } catch {
        return "false";
    }
}

I все время искали кого-то с той же проблемой, но ни один из ответов не был полезен, или это была не та же самая проблема. Пожалуйста, помогите, если у вас есть опыт для этого.

...