5

このライブラリを使用して、SSH 接続を介して C# を使用して MySQL データベースに接続するためのリンクが提供されました。

SSH チャネルを手動で開く必要がないため、多くの人が興味深いと思うライブラリへのリンクを次に示します。

これは非常に詳細なライブラリであり、多くの機能を備えていますが、私がやりたいことは非常に単純です。データベースに書き込むたびに SSH チャネルを開きたいだけです。

提供されたソースを検索しているときに、TestSshCommand.csにあるコードのこの部分にたどり着きました。この部分を接続に使用できると思いますが、私が持っているように機能させるにはあなたの助けが必要です私の接続文字列すべてを接続する方法がわかりません。

コード:

public void Test_Execute_SingleCommand()
        {
            using (var client = new SshClient(Resources.HOST, Resources.USERNAME, Resources.PASSWORD))
            {
                client.Connect();
                var result = ExecuteTestCommand(client);
                client.Disconnect();

                Assert.IsTrue(result);
            }

非 SSH チャネルに接続するための私のコードは次のとおりです。

con.ConnectionString = ConfigurationManager.ConnectionStrings["Con2"].ConnectionString;
            con.Open();
            cmd = new MySqlCommand("SELECT COUNT(*) FROM " + ConfigSettings.ReadSetting("main"), con);

     //...... more of the code

では、このコードを上記のコードと組み合わせて、最初に SSH チャネルを開き、次にクエリを実行できるようにするにはどうすればよいでしょうか?

接続関数と切断関数内にコードを配置する必要がありますか?

もう1つ、参照内に.dllファイルを追加したと思いますが、インポートが機能していないと言わざるを得ません。誰かがライブラリをダウンロードして、この簡単なコードを試して、あなたのプロジェクトで参照が機能しているかどうかを確認し、誰もが将来のプロジェクトで有効なソリューションを持てるようにしてください。

編集:

これは、後でやろうとしていた私のコードです。私のSSH接続は、これら2つを組み合わせるだけで機能するようになりました。

問題は、PC にローカルに 1 つのデータベースが必要で、サーバーに接続する必要があることです。そのため、誰かがフォーラムで、mysql が実行用のポートを既に持っている間はポート転送できないと言っているように、ポート転送は機能しません。

using (var client = new SshClient("cpanel****", "******", "******"))
          {
            client.Connect();
            con = new MySqlConnection(GetConnectionString());
            con.Open();
            cmd = new MySqlCommand(String.Format("insert into {0} values (null, ?Parname , ?Parname2, ?Parname3, ?Parname4, ?Parname5, ?Parname6, ?Parname7);", ConfigSettings.ReadSetting("main")), con);
            cmd.Parameters.Add("?Parname", MySqlDbType.Double).Value = Math.Round(deciLat, 5);
            // ... more parameters
            cmd.ExecuteNonQuery();
            client.Disconnect();
           }
4

2 に答える 2

7

MySQL インスタンスで使用されている 3306 とは異なるローカル ポートをトンネルに使用する必要があります。

以下の例では、代わりにポート 8001 が使用されています。

using (var client = new SshClient("ssh_hostname", "ssh_username", "ssh_password"))
{
  client.Connect();
  var tunnel = new ForwardedPortLocal("127.0.0.1", 8001, "127.0.0.1", 3306);
  client.AddForwardedPort(tunnel);
  tunnel.Start();
  using (var DB = new DBContext())
  {
    //MySQL interaction here!
    scores = DB.Table
      .Where(x => !String.IsNullOrEmpty(x.SomeField))
      .ToList();
  }
  tunnel.Stop();
}

そして、接続文字列にサーバー127.0.0.1とポート8001があることを確認してください

server=127.0.0.1;port=8001

これにより、127.0.0.1:8001 へのすべてが ssh_hostname:3306 に接続されます。

于 2015-01-01T23:02:40.927 に答える
5

You will need to setup port forwarding with your SSH connection...

Basically make a SSH connection that listens on port 3306 on localhost and forwards that to your MySQL DB server...

In the connections string to your MySQL DB you need to change the part server=... to server=localhost while your SSH connection needs to go to your MySQL DB server's IP.

IF you can't forward port 3306 you can use any port you want BUT you need change the additionally the port= part of the connection string... see here for examples on connection strings with a different port... the SSH connection still targets 3306 but listens on a different port on localhost in this case...

Here are some working examples with source code (although not with SSH.NET since I don't use SSH.NET but this should nonetheless get you started IMO):

于 2012-06-01T10:39:13.207 に答える