MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
C Sharpとネットワーク - SSHのソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
C Sharpとネットワーク - SSH
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == SSH (Secure Shell) は、ネットワーク上の別のコンピュータにリモートでアクセスするための暗号化されたプロトコルである。<br> <br> 主に以下の3つの機能がある。<br> * リモートログイン *: 別のコンピュータにログインして、コマンドラインからファイル操作やプログラムの実行等ができる。 * ファイル転送 *: SCPまたはSFTPというプロトコルを使用してて、安全にファイルを転送できる。 * X11フォワーディング *: X Window Systemのグラフィカルな出力をリモートで表示することができる。 <br> SSHは従来のTelnetやFTP等の非暗号化プロトコルと比較して、通信内容が盗聴から守られるため、セキュリティが高いのが大きな利点である。<br> また、公開鍵暗号方式を用いた認証では、パスワードを明示的に送る必要が無い。<br> <br> UNIXシステムでは標準でSSHサーバが含まれており、WindowsでもサードパーティーのSSHクライアント / サーバが利用できる。<br> 多くのクラウドサービスやネットワーク機器でもSSHによるリモート管理を行うことができる。<br> <br> C#において使用できるSSHライブラリとして、SSH.NET等がある。<br> * SSH.NET *: SSH.NETは、C#向けのOSSのSSHライブラリであり、SSH、SFTP、SCPの機能を提供している。 *: Renci.SshNetとは別のプロジェクトである。 *: <br> *: SSH.NETのライセンスはMITである。 *: <br> *: GitHub *: https://github.com/sshnet/SSH.NET/ *: NuGet *: https://www.nuget.org/packages/SSH.NET <br><br> == 処理の流れ == # SshClientクラスのインスタンスを生成して、ホスト、ユーザ名、パスワードを指定する。 # <code>Connect</code>メソッドを使用して、リモートPCへの接続を確立する。 # <code>RunCommand</code>メソッドを使用して、コマンドを実行する。<br><code>Result</code>プロパティで出力を取得することができる。 # <code>Execute</code>メソッドを使用してコマンドを実行することにより、終了コードを取得することができる。 <br> SSH.NETには他にも様々な機能があり、ファイル転送、SFTPサポート、ポートフォワーディング等ができる。<br> <br><br> == サンプルコード == == リモートPCでコマンドを実行 == <syntaxhighlight lang="c#"> using Renci.SshNet; class Program { static void Main(string[] args) { using (var client = new SshClient("<リモートPCのIPアドレス または ホスト名>", "<リモートPCのユーザ名>", "<リモートPCのユーザ名のパスワード>")) { client.Connect(); // リモートPC上で"ls -l"コマンドを実行する var cmd = client.RunCommand("ls -l"); Console.WriteLine(cmd.Result); // リモートPC上で"mkdir tmpdir"コマンドを実行する var result = client.RunCommand("mkdir tmpdir").Execute(); Console.WriteLine("Exit code: {0}", result); } } } </syntaxhighlight> <br><br> == ポートフォワーディング == SSH.NETには、ポートフォワーディングの機能が組み込まれており、<br> <code>ForwardedPortLocal</code>クラスを使用してローカルポートフォワーディングを実装することができる。<br> <br> <u>ポートフォワーディングが使用される理由としては、リモートPCにSSHで直接接続できない場合に別のホストを経由して接続するためである。</u><br> <br> 以下の例では、ローカルPCの50022番ポートからリモートPCの22番ポートへの接続を転送している。<br> <br> * <code>portForwarded.Start</code>メソッドを使用して、ポートフォワーディングを開始する。 * <code>portForwarded.Stop</code>メソッドを使用して、ポートフォワーディングを停止する。 <br> <u>ただし、リモートPCの設定によっては、ポートフォワーディングができない場合もあるので注意が必要となる。</u><br> <syntaxhighlight lang="c#"> using Renci.SshNet; using Renci.SshNet.Common; class Program { static void Main(string[] args) { using (var client = new SshClient("<リモートPCのIPアドレス または ホスト名>", "<リモートPCのユーザ名>", "<リモートPCのユーザ名のパスワード>")) { client.Connect(); var portForwarded = new ForwardedPortLocal("<ホストPCのIPアドレス または ホスト名>", 50022, "<リモートPCのIPアドレス または ホスト名>", 22); client.AddForwardedPort(portForwarded); portForwarded.Exception += PortForwarded_Exception; portForwarded.Start(); using (var cmd = client.CreateCommand("ls -l")) { var result = cmd.Execute(); Console.WriteLine("Command output: {0}", result); } portForwarded.Stop(); } } private static void PortForwarded_Exception(object sender, ExceptionEventArgs e) { Console.WriteLine($"Port forwarded exception: {e.Exception.Message}"); } } </syntaxhighlight> <br><br> __FORCETOC__ [[カテゴリ:C_Sharp]]
C Sharpとネットワーク - SSH
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse