.netでSFTPをしてみる
Posted 5月 7th, 2011 by hippos
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