JSch使うように修正中
SFTPの実装にganymed-ssh-2を使っていたが、接続先鯖によってはパケットサイズが異常で例外が発生しちゃって回避も無理ぽいんで、JSch使うように修正中。
JSchでうまくいきそうなんだが、
以前から判明していたが、自ビルドしようとしても配布物に何か不足がある様でビルドできない。
バイナリも配布されてるんでバイナリ使えば問題ないが。
使い方はganymed-ssh-2以上に難解な感じ。
標準でホストのチェックを行うようになってるが、KnownHostsの設定はファイルパスを渡すようになってて、直接登録はできなそう。
"StrictHostKeyChecking"="no" の入ったHashtableをsetConfigに渡すとチェックを回避できる。
公開鍵認証のキーは接続前にaddIdentityで登録しなければならないが、
addIdentityには引数の違うメソッドが複数あるが、ほとんどがキーファイルを渡すメソッドになっていて、
秘密鍵の内容をbyte[]で渡せば公開鍵認証ができる。公開鍵とパスフレーズはnullでいける。
nameは適当な文字列でいいぽい。
公開鍵認証の場合はjsch.addIdentityで鍵登録だが、
パスワード認証の場合はSessionを取得後ににSession.setPasswordで設定と、公開鍵認証とパスワード認証で認証のタイミングが違う。
今のところganymed-ssh-2のように致命的なバグには遭遇してなく、公開鍵認証もパスワード認証もできそうだが、
ganymed-ssh-2と比べて認証までの速度が遅い感じで、数秒かかってる。
ChannelSftpにはcdコマンドがあったり、
ChannelからSessionが取得できて、Sessionを切断するとChannelも全切断してくれるようで、
接続さえしちゃえばJSchの方が使いやすそうな感じ。
ganymed-ssh-2のSFTPv3Clientにはcdメソッドがないし、SFTPv3ClientからConnectionが取得できないので切断処理もめんどかった。
JSchでうまくいきそうなんだが、
以前から判明していたが、自ビルドしようとしても配布物に何か不足がある様でビルドできない。
バイナリも配布されてるんでバイナリ使えば問題ないが。
使い方はganymed-ssh-2以上に難解な感じ。
標準でホストのチェックを行うようになってるが、KnownHostsの設定はファイルパスを渡すようになってて、直接登録はできなそう。
JSch jsch=new JSch();
Hashtable config=new Hashtable();
config.put("StrictHostKeyChecking","no");
jsch.setConfig(config);
てな感じで、JSchのインスタンスを作成した後に、Hashtable config=new Hashtable();
config.put("StrictHostKeyChecking","no");
jsch.setConfig(config);
"StrictHostKeyChecking"="no" の入ったHashtableをsetConfigに渡すとチェックを回避できる。
公開鍵認証のキーは接続前にaddIdentityで登録しなければならないが、
addIdentityには引数の違うメソッドが複数あるが、ほとんどがキーファイルを渡すメソッドになっていて、
public void addIdentity(String name, byte[]prvkey, byte[]pubkey, byte[] passphrase)
のみが唯一キーを変数で渡せる。秘密鍵の内容をbyte[]で渡せば公開鍵認証ができる。公開鍵とパスフレーズはnullでいける。
nameは適当な文字列でいいぽい。
公開鍵認証の場合はjsch.addIdentityで鍵登録だが、
パスワード認証の場合はSessionを取得後ににSession.setPasswordで設定と、公開鍵認証とパスワード認証で認証のタイミングが違う。
今のところganymed-ssh-2のように致命的なバグには遭遇してなく、公開鍵認証もパスワード認証もできそうだが、
ganymed-ssh-2と比べて認証までの速度が遅い感じで、数秒かかってる。
ChannelSftpにはcdコマンドがあったり、
ChannelからSessionが取得できて、Sessionを切断するとChannelも全切断してくれるようで、
接続さえしちゃえばJSchの方が使いやすそうな感じ。
ganymed-ssh-2のSFTPv3Clientにはcdメソッドがないし、SFTPv3ClientからConnectionが取得できないので切断処理もめんどかった。