2010年03月10日

GanymedとかでのRSA認証

Javaでsshやscpを呼び出したいときに便利なライブラリに

・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もうまくいった。やっぱり、同じ役割をするのでも仕組みが違うんだなーっということに気づいた。

まあ、それだけの話だけど、それに気付くのに時間がかかったので一応記録しようと思ったのです。。。


posted by hana at 14:15| Comment(0) | TrackBack(0) | JAVA | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック