C Sharpとネットワーク - SSH

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
2024年6月19日 (水) 20:17時点におけるWiki (トーク | 投稿記録)による版 (ページの作成:「== 概要 == SSH (Secure Shell) は、ネットワーク上の別のコンピュータにリモートでアクセスするための暗号化されたプロトコルである。<br> <br> 主に以下の3つの機能がある。<br> * リモートログイン *: 別のコンピュータにログインして、コマンドラインからファイル操作やプログラムの実行等ができる。 * ファイル転送 *: SCPまたはSFTPというプロトコルを使…」)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

概要

SSH (Secure Shell) は、ネットワーク上の別のコンピュータにリモートでアクセスするための暗号化されたプロトコルである。

主に以下の3つの機能がある。

  • リモートログイン
    別のコンピュータにログインして、コマンドラインからファイル操作やプログラムの実行等ができる。
  • ファイル転送
    SCPまたはSFTPというプロトコルを使用してて、安全にファイルを転送できる。
  • X11フォワーディング
    X Window Systemのグラフィカルな出力をリモートで表示することができる。


SSHは従来のTelnetやFTP等の非暗号化プロトコルと比較して、通信内容が盗聴から守られるため、セキュリティが高いのが大きな利点である。
また、公開鍵暗号方式を用いた認証では、パスワードを明示的に送る必要が無い。

UNIXシステムでは標準でSSHサーバが含まれており、WindowsでもサードパーティーのSSHクライアント / サーバが利用できる。
多くのクラウドサービスやネットワーク機器でもSSHによるリモート管理を行うことができる。

C#において使用できるSSHライブラリとして、SSH.NET等がある。



処理の流れ

  1. SshClientクラスのインスタンスを生成して、ホスト、ユーザ名、パスワードを指定する。
  2. Connectメソッドを使用して、リモートPCへの接続を確立する。
  3. RunCommandメソッドを使用して、コマンドを実行する。
    Resultプロパティで出力を取得することができる。
  4. Executeメソッドを使用してコマンドを実行することにより、終了コードを取得することができる。


SSH.NETには他にも様々な機能があり、ファイル転送、SFTPサポート、ポートフォワーディング等ができる。


サンプルコード

リモートPCでコマンドを実行

 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);
       }
    }
 }