私が書いている.NETアプリケーションにSSHポートフォワーディングを組み込みたいと思っています。
私はsharpSSHを使用してみましたが、ユーザーは毎回パスワードを入力する必要があり、それは望ましくありません。パスワードの保存を処理します。
Granadosをダウンロードしましたが、基本的にドキュメントはありません。Granadosまたはその他の.NET用の無料SSHライブラリを使用してポート転送を実行するにはどうすればよいですか?
SSH.NET ライブラリは、これを実現する簡単な方法です。
using (var client = new SshClient("client.net", "user", "password"))
{
client.Connect();
var port = new ForwardedPortLocal("localhost", 10000, "remote.net", 80);
client.AddForwardedPort(port);
port.Exception += delegate(object sender, ExceptionEventArgs e)
{
Console.WriteLine(e.Exception.ToString());
};
port.Start();
// ... hold the port open ... //
port.Stop();
client.Disconnect();
}
リモートで SSH サーバーに DSA キーをセットアップする場合、ユーザーのキーを保存し (これは 1 回限りの作業として行います)、許可されたユーザーとしてサーバーにキーを保存できます。
これらの C# の代替はすべて、JCraft の Java Jschから派生したものです。
Granados製品ページは、 PortForwarding プラグインを含むPoderosaプロジェクトにリンクしています。そこにあるchannel.csファイルとconnectionmanager.csファイルのソース コードは、ポート フォワーディングを実装しているようです。推奨事項については、この回答を参照してください。
Nschは、MonoDevelop のNGit内に隠された宝石のようです。Jsch からほとんど自動的に変換されます(背景情報)。
スマトラ PDF のKrzysztof Kowalczykによる 2011 年 2 月のさらなる調査。
これは、 SharpSSHを使用して、これらのいずれもparameters:
(完全に自動化されたポート転送)を促進しない方法です。
(user,host,Lport,Rhost,Rport,DSA-key-confirmation,Password)
Dim JJ As Tamir.SharpSsh.jsch.JSch = New Tamir.SharpSsh.jsch.JSch()
Dim sess As Tamir.SharpSsh.jsch.Session = JJ.getSession("user", "remoteadd.dydns.com")
Dim conf As Hashtable = New Hashtable()
conf.Add("StrictHostKeyChecking", "no")
sess.setConfig(conf)
sess.setPassword("password")
sess.connect()
sess.setPortForwardingR(45, "127.0.0.1", 256)