.netでSFTPをしてみる

in

FTP/SSLか、SFTPの実装が必要になりそうなので準備。C#でやろうと思っているので、FTP/SSLのほうは.net標準のFtpWebRequestにまかせてSFTPのほうをググってみたら

この2つが見つかりました。サンプルをザッとながめてみたらSharpSSHがのほうが簡単そうだったのでとりあえずサンプルコードを書いてみました。

private void runUpload()
{
  Tamir.SharpSsh.jsch.JSch jsch = new Tamir.SharpSsh.jsch.JSch();
  Tamir.SharpSsh.jsch.Session session = jsch.getSession("foo", "example.com", 22);
  UserInfo uinfo = new MyUserInfo();
  session.setUserInfo(uinfo);
  session.connect();
  Channel channel = session.openChannel("sftp");
  channel.connect();
  ChannelSftp c = (ChannelSftp)channel;      
  Tamir.SharpSsh.java.io.FileInputStream source = 
    new Tamir.SharpSsh.java.io.FileInputStream("xyz.txt");
  c.cd("temp/data");     
  c.put(source, "abc.txt");
  c.exit();
  session.disconnect();
}

public class MyUserInfo : UserInfo
{
  public String getPassphrase() { return null; }
  public String getPassword() { return "foovar"; }
  public bool promptPassword(String message) { return true; }
  public bool promptPassphrase(String message) { return true; }
  public bool promptYesNo(String message) { return true; }
  public void showMessage(String message) 
  { 
     MessageBox.Show
       (message, "SSH", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); 
  }
}

これ、Javaで実装されたjschのAPIを利用していてそこここにJavaの名前が見えるところが面白いっちゅうか世界は広い。暗号化関連はMentalis.org Crypto Libraryを使ってます。

サンプルではMyUserInfoのところをUI実装してごにょごにょしていましたが、僕の場合はそこらへんは不要なのでそのまま値を返すように変更。とりあえずテストはできたのでこれで検討してみます。後はパスワードじゃなくて鍵を使う場合のほうも調べなきゃいけないし、週明けもう少し詳しく調べてみる予定。

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/392

Comments