プログラミングでアイデアを具現化したい

仮説アルファを妄想するのが日課でアイデアを具現化するためにプログラミングを始めました。主な言語はC# 。

SSHでPostgresqlに接続した話

趣味プログラマーとして今までノーガード上等でやってきましたがちょっとした事情で
セキュリティを高める必要があって、DBサーバへSSH接続してDBサーバから情報を
クライアントアプリで取得するフローを構築したのでメモ書き。

クラウドにおいてるwinサーバ(DBサーバでもあるw)にOPENSSHをインストールしてサービス開始。
このサイトがわかりやすかった。
https://www.server-world.info/query?os=Windows_Server_2016&p=openssh


②クライアントアプリからのアクセスもSSHに対応させる為、SSH.NETというライブラリを使用。
言語はもちろんC#。なんだかんだで中途半端にC#しかできねぇ
サンプルコードはこのサイトがわかりやすかった。
http://shen7113.blog.fc2.com/blog-category-4.html


サンプルコード
※あくまでサンプルなので、SSHのコネクション閉じないのかとかそーゆう話は別でw

public List<独自クラス> Get独自データ(引数) {
    try {

        var connectionInfo = new PasswordConnectionInfo("winサーバIP", 22, "winサーバユーザ", "パスワード");
        var client = new SshClient(connectionInfo);
        client.Connect(); //SSH接続
       
        var forward = new ForwardedPortLocal("127.0.0.1(localhost)", 63333, "winサーバIP", postgresqlで使うport);
        client.AddForwardedPort(forward);
        forward.Start(); //ポートフォアード開始

        NpgsqlCommand cmd = new NpgsqlCommand("ストアドファンクション名", _connPostgre);
        cmd.Parameters.AddWithValue("ストアドの引数", 引数);
        cmd.CommandType = System.Data.CommandType.StoredProcedure;
        _connPostgre.Open();
        var result = cmd.ExecuteReader();
        var hoges  = new List<独自クラス>();
        while (result.Read()) {
            var hoge = new 独自クラス() {
                Name = result.GetValue(0).ToString(),
                Age = result.GetValue(1).ToString(),
            };
            hoges  (hoge );
        }

        return hoges  ;

    }
    catch (Exception ex) {
        Program.logger.Error(ex);
        return new List<独自クラス>();
    }
    finally {
        if (_connPostgre != null)
            _connPostgre.Close();
    }
}


こーゆう実装は今までしたことなかったのでやってみて良かったかもしれない。