・Ganymed
・JSch
とかがある。自分はもっぱらGanymedばっかり。
簡単に流れを紹介すると、
Connection conn = null;
try {
// コネクト
conn = new Connection(hostname);
ConnectionInfo info = conn.connect();
// ログイン
boolean result = conn.authenticateWithPassword(userid, password);
// ログイン判定
if (result) {
// scp
SCPClient scp = conn.createSCPClient();
SFTPv3Client sftp = new SFTPv3Client(conn);
までやって、後はscpオブジェクトや、sftpオブジェクトでいろいろできる。
例えば、
・ディレクトリ内のファイル一覧
Vector vec = sftp.ls(target_path);
・ディレクトリ作成
sftp.mkdir(make_path, 600);
・属性取得(ディレクトリか判定)
SFTPv3FileAttributes att = entry.attributes;
if(att.isDirectory()) {
}
・ファイル取得
scp.get(target_path, save_path);
・ファイル送信
scp.putFile(target_file, save_path);
・コマンド実行
Session session = conn.openSession();
session.execCommand("ls");
などなど重宝している。
で、今回記録しておきたいのはSSHサーバーがRSA認証の時の話。
特に難しいことではないのだけど、ログイン部分がちょっと変わる。
// ログイン
boolean result = conn.authenticateWithPublicKey(userid, new File("id_rsa"), password);
で、第二パラメータの秘密鍵の部分に指定する鍵が若干悩んだ。
WindowsからRSA認証する際の王道的な方法にPuttyを利用する場合がある。
で、最初はPuttyで作成した秘密鍵を使ってログインしようとしていてできなくて悩んだ。
まあ、Tera TermとかもでPuttyの鍵ではNGなので同じ理由だと思う。
要はPuttyの鍵は、Linuxで生成するものとは仕組みなどが違うのだろうと結論になった。
で、試しにVirtualBoxに入っていたLinuxで鍵を生成して、その秘密鍵で行うとうまくいった。
Tera Termもうまくいった。やっぱり、同じ役割をするのでも仕組みが違うんだなーっということに気づいた。
まあ、それだけの話だけど、それに気付くのに時間がかかったので一応記録しようと思ったのです。。。