Как подключить SSH.NET в MongoDB C # - PullRequest
1 голос
/ 12 июня 2019

Я использую этот клиент SSH.NET https://github.com/sshnet/SSH.NET/ и последний клиент MongoDB C #. Согласно https://jira.mongodb.org/browse/CSHARP-1142 я пытаюсь внедрить SSHStream в настройки клиента MongoDB. Мое соединение SSH успешно. Но я не могу установить соединение с MongoDB через SSH.

   static void Main(string[] args)
    {
        MongoClientSettings settings = new MongoClientSettings
        {
            ClusterConfigurator = cb =>
            {
                cb.RegisterStreamFactory(CustomStreamFac);
            }   
        };
        MongoClient mongoClient = new MongoClient(settings);
        IMongoDatabase db = mongoClient.GetDatabase("testdb");
        var collections = db.ListCollections();
    }

    public static IStreamFactory CustomStreamFac(IStreamFactory istreamfac)
    {

        Stream stream = istreamfac.CreateStream();
        return istreamfac;
    }

public static class Extension
{
    public static Stream CreateStream(this IStreamFactory isf)
    {
        ConnectionInfo conn = new ConnectionInfo(hostname, port, username, new PrivateKeyAuthenticationMethod(username, new PrivateKeyFile(keyfile, password)));
        SshClient cli = new SshClient(conn);
        cli.Connect();
        ShellStream shellStream = null;
        shellStream = cli.CreateShellStream("Command", 0, 0, 0, 0, 1024);            
        return shellStream;
    }
}

Любая помощь приветствуется.

1 Ответ

2 голосов
/ 15 июля 2019

Вы можете запустить SSH-клиент, используя следующий код.

ConnectionInfo conn = new ConnectionInfo(SSHServerHost, SSHServerPort,SSHServerUserName, new PrivateKeyAuthenticationMethod(SSHServerUserName, new PrivateKeyFile(PrivateKeyPath,SSHServerPassword)));
SshClient = new SshClient(conn);
SshClient.Connect();
ForwardedPortLocal forwardedPortLocal = new ForwardedPortLocal("127.0.0.1",5477,MongoDBHost, MongoDBPort);
SshClient.AddForwardedPort(forwardedPortLocal);
forwardedPortLocal.Start();

Теперь SSH-клиент будет перенаправлять локальный порт 5477 на удаленный сервер базы данных MongoDB.

MongoClient может использоваться для связи с MongoDBСервер с хостом в качестве локального хоста и портом 5477.

См. Ниже фрагмент кода для подключения к серверу MongoDB.

MongoConnection connection = new MongoConnection();
MongoDBClientConnection clientConnection = new MongoDBClientConnection(){MongoDBClient = new MongoClient( MongoClientSettings settings = new MongoClientSettings
            {
                Server = new MongoServerAddress(localhost, 5477)                
            };)}        
connection.MongoDBServer = clientConnection.MongoDBClient.GetServer();
connection.MongoDBServer.Connect();

Выше код подключится к серверу MongoDB через туннель SSH.

...