JavaリモートのLinuxシステムにファイルをコピーするコードを探しています。scp
コマンドを渡すことでRuntime.getRuntime().exec()
関数を試しましたが、毎回リモートシステムのパスワードを要求するプログラムを実行しますが、それを避けたいのですが。
私はJsch
ライブラリを調べました-これを使用してリモートシステムにログインできます-しかし、ファイルをリモートシステムにコピーできません。ログインすると、ホストに対してscp
を実行できますが、ホストシステムのユーザー名とパスワードが必要になります。ただし、私はリモートシステムの情報しか持っていません。
あるホストから別のホストにファイルをコピーするには、リモートホストにデーモンが必要であり、アプリケーションレベルのファイル転送プロトコルを実装しています。これは、そのリモートデーモンと通信する言語に関係なく必要です。
Linuxシステムのオプションは次のとおりです。
ほとんどすべてのシステムですぐに実装および構成できる単一の広く採用され、標準化されたプロトコルがないため、これらすべては多くの作業のように見えます。
このコードスニペットを使用して、ファイルを別のlinux
マシンにコピーできます。
JSch jsch = new JSch();
Session session = null;
session = jsch.getSession("username","hostname",22);
session.setPassword("password");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
ChannelSftp channel = null;
channel = (ChannelSftp)session.openChannel("sftp");
channel.connect();
File localFile = new File("localfilepath");
//If you want you can change the directory using the following line.
channel.cd(RemoteDirectoryPath)
channel.put(new FileInputStream(localFile),localFile.getName());
channel.disconnect();
session.disconnect();
これで、ssh-keygen
を使用して生成されたリモートシステムに公開鍵を追加しました。したがって、プログラムを実行するたびにパスワードを要求することはありません。