JavaでSSHを使用する必要が出てきたので、
Orion SSH2を使用したが、落とし穴にハマったメモ。
やりたいことはJavaでscpしたいだけなので
google先生に色々聞きながらとりあえず実装してみた。
ローカルから、サーバへファイル転送できることを確認してプロトタイプ完了。
しかし、転送先を新たに作成した仮想環境に変更すると、失敗する。
「 Error during SCP transfer. 」
設定ミスったかぁと思い、いろいろ見なおすも特に問題ない。
当然、ターミナルで直接接続も問題ない。
Sshdのログから、認証に成功した後、クライアントから切断しているので
ファイルをputした際のリモートディレクトリが怪しいのだが、、、問題ないなぁ。
仕方ないのでOrionSSH2のソースをほじくり返す。
以下該当箇所抜粋(一部省略)
String cmd = “scp -t -d ” + remoteTargetDirectory;
try
{
sess = conn.openSession();
sess.execCommand(cmd);
sendFiles(sess, localFiles, remoteFiles, mode);
}
catch (IOException e)
{
throw (IOException) new IOException(“Error during SCP transfer.”).initCause(e);
}
「scp -t -d 」ってなんだ?
そんなオプション知らないし、そもそもサーバ側でコマンド発行してる?
確かに仮想環境はCentOSの最小構成なので、入っていないものも多い。
scpコマンドが使用できないので、openssh-clientをインストールして再度チャレンジ。
scp成功。
マニュアルに記載のないオプションなので詳細不明だが、
ディレクトリのテストコマンドだと勝手に理解して納得。
1 Response to 解ってしまえばすぐですが。。。