मुझे libssh c++ आवरण libsshpp का उपयोग करके Windows फ़ाइल पथ विभाजक के साथ समस्या हो रही है।

मान लीजिए मेरे पास निम्नलिखित कोड है:

#define SSH_NO_CPP_EXCEPTIONS
#include "libssh/libsshpp.hpp"

#include <iostream>

#pragma comment(lib, "ssh")

int main() 
{
    ssh::Session session;

    int sessionMsg = -1;

    std::string host        = "myhost.com";
    std::string user        = "username";
    std::string idfile      = "%s\\.ssh\\id_ed25519";
    std::string hostkeys    = "ssh-ed25519";
    std::string keyExchange = "curve25519-sha256";

    session.setOption(SSH_OPTIONS_HOST,                 host.c_str());
    session.setOption(SSH_OPTIONS_USER,                 user.c_str());
    session.setOption(SSH_OPTIONS_STRICTHOSTKEYCHECK,   (long)0);
    session.setOption(SSH_OPTIONS_HOSTKEYS,             hostkeys.c_str());
    session.setOption(SSH_OPTIONS_KEY_EXCHANGE,         keyExchange.c_str());
    session.setOption(SSH_OPTIONS_ADD_IDENTITY,         idfile.c_str());

    std::cout << "Trying to connect to " << host << " with user " << user << "...\n";

    session.connect();

    if (session.isServerKnown() != SSH_SERVER_KNOWN_OK) {
        std::cout << "Server unknown.\n";

        if (session.writeKnownhost() != SSH_OK) {
            std::cout << "Unable to write to known_hosts file.\n";
        }
        else {
            session.connect();
        }
    }

    sessionMsg = session.userauthPublickeyAuto();

    std::string err = session.getError();

    if (sessionMsg != SSH_AUTH_SUCCESS) {
        if (!err.empty()) {
            std::cout << err;
        }

        std::cout << "Auth failed.";
    }
    else {
        std::cout << err.empty() ? session.getIssueBanner() : err;
    }
}

शुरुआत में मैंने idfile मान को केवल id_ed25519 पर सेट किया था, लेकिन फिर libssh ने शिकायत की: Failed to read private key: C:\Users\MyUser/.ssh/id_ed25519 (स्लैश स्विचिंग पर ध्यान दें)। इसे %s\\.ssh\\id_ed25519 में बदलने के बाद कनेक्शन रूटीन पर इसका सकारात्मक प्रभाव पड़ा, लेकिन अब मैं (session.writeKnownhost() != SSH_OK) कोड भाग में आता रहता हूं।

अब, मैं सोच रहा हूं कि क्या यह उसी "स्विचिंग स्लैश" समस्या के कारण हो सकता है जो निजी कुंजी फ़ाइल पथ के लिए आया था क्योंकि स्पष्ट रूप से libssh C:\Users\MyUser\.ssh\known_hosts लेकिन संभवतः पथ कुछ इस तरह सेट किया गया है जैसे C:\Users\MyUser/.ssh/ज्ञात_होस्ट

मेरा प्रश्न है: क्या सत्र में किसी तरह पथ विभाजक को विंडोज़-शैली में बदलने की संभावना है या क्या कुछ और है जो मैं देख रहा हूँ या यहाँ गलत कर रहा हूँ?

0
taiBsu 1 अप्रैल 2020, 23:07

1 उत्तर

सबसे बढ़िया उत्तर

मैं SSH_OPTIONS_SSH_DIR विकल्प जोड़ने और निजी कुंजी और ज्ञात_होस्ट पथ (अब ssh निर्देशिका पथ के सापेक्ष) को बदलने में समस्या को हल करने में सक्षम था:

// note here: %s will be replaced by libssh with the home directory path
std::string sshDir = "%s//.ssh"; 
std::string idFile = "id_ed25519";
std::string knownHosts = "known_hosts";

// ...
session.setOption(SSH_OPTIONS_USER, user.c_str());
session.setOption(SSH_OPTIONS_SSH_DIR, sshDir.c_str()); // <-- added
// ...
0
taiBsu 2 अप्रैल 2020, 16:07