У меня проблемы с Windows разделителями путей к файлам с использованием библиотеки libs sh c ++ libsshpp .
Предположим, у меня есть следующий код:
#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
, но затем libs sh пожаловался: Failed to read private key: C:\Users\MyUser/.ssh/id_ed25519
(обратите внимание на косые черты переключения). После изменения его на %s\\.ssh\\id_ed25519
это, похоже, оказало положительное влияние на процедуру соединения, однако теперь я продолжаю попадать в часть кода (session.writeKnownhost() != SSH_OK)
.
Теперь мне интересно, может ли это быть из-за той же проблемы "переключения слешей", которая возникла для пути к файлу закрытого ключа, потому что, очевидно, libs sh хочет получить доступ к C:\Users\MyUser\.ssh\known_hosts
, но вполне возможно, путь задается как что-то вроде C:\Users\MyUser/.ssh/known_hosts
.
Мой вопрос: есть ли возможность каким-либо образом изменить разделители пути в стиле windows в сеансе или есть что-то еще, что я наблюдаю или делаю неправильно?