C Sharpとネットワーク - SSH
ナビゲーションに移動
検索に移動
概要
SSH (Secure Shell) は、ネットワーク上の別のコンピュータにリモートでアクセスするための暗号化されたプロトコルである。
主に以下の3つの機能がある。
- リモートログイン
- 別のコンピュータにログインして、コマンドラインからファイル操作やプログラムの実行等ができる。
- ファイル転送
- SCPまたはSFTPというプロトコルを使用してて、安全にファイルを転送できる。
- X11フォワーディング
- X Window Systemのグラフィカルな出力をリモートで表示することができる。
SSHは従来のTelnetやFTP等の非暗号化プロトコルと比較して、通信内容が盗聴から守られるため、セキュリティが高いのが大きな利点である。
また、公開鍵暗号方式を用いた認証では、パスワードを明示的に送る必要が無い。
UNIXシステムでは標準でSSHサーバが含まれており、WindowsでもサードパーティーのSSHクライアント / サーバが利用できる。
多くのクラウドサービスやネットワーク機器でもSSHによるリモート管理を行うことができる。
C#において使用できるSSHライブラリとして、SSH.NET等がある。
- SSH.NET
- SSH.NETは、C#向けのOSSのSSHライブラリであり、SSH、SFTP、SCPの機能を提供している。
- Renci.SshNetとは別のプロジェクトである。
- SSH.NETのライセンスはMITである。
- GitHub
- https://github.com/sshnet/SSH.NET/
- NuGet
- https://www.nuget.org/packages/SSH.NET
処理の流れ
- SshClientクラスのインスタンスを生成して、ホスト、ユーザ名、パスワードを指定する。
Connect
メソッドを使用して、リモートPCへの接続を確立する。RunCommand
メソッドを使用して、コマンドを実行する。Result
プロパティで出力を取得することができる。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);
}
}
}