한 Linux 시스템에서 다른 Linux 시스템으로 파일을 복사하는 Java 코드

한 Linux 시스템에서 다른 Linux 시스템으로 파일을 복사하는 Java 코드

원격 Linux 시스템에 파일을 복사하기 위한 Java 코드를 찾고 있습니다. 작동하도록 명령을 Runtime.getRuntime().exec()전달하려고 시도했지만 프로그램을 실행할 때마다 원격 시스템 비밀번호를 묻습니다. scp나는 이런 상황을 피하고 싶다.

이 라이브러리를 살펴보았습니다 Jsch. 이를 사용하여 원격 시스템에 로그인할 수 있지만 파일을 원격 시스템에 복사할 수는 없습니다. 로그인한 후 scp호스트에서 작업을 수행할 수 있지만 이 경우에도 호스트 시스템 사용자 이름과 비밀번호가 필요합니다. 하지만 원격 시스템에 대한 정보만 가지고 있습니다.

답변1

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();

이러한 방식으로 generate를 사용하여 원격 시스템에 공개 키를 추가했습니다 ssh-keygen. 따라서 프로그램을 실행할 때마다 비밀번호를 묻지 않습니다.

답변2

한 호스트에서 다른 호스트로 파일을 복사하려면 일부 애플리케이션 수준 파일 전송 프로토콜을 구현하는 원격 호스트의 데몬이 필요합니다. 이는 원격 데몬과 통신하는 데 사용하려는 언어에 관계없이 요구 사항입니다.

Linux 시스템의 옵션은 다음과 같습니다.

  • SSH. 이를 위해서는 원격 측에 SSH 데몬(예: openssh-server)이 필요합니다. SSH는 보안을 위해 설계되었기 때문에 비밀번호나 개인 키를 사용하여 인증하도록 원격 호스트를 구성해야 합니다. 실제로 파일 복사는 scp 유틸리티나 ssh 클라이언트 라이브러리를 통해 수행할 수 있습니다(jsch가 이에 대한 예입니다).
  • 네트워크 파일 시스템. 원격 호스트는 데몬(예: Samba)을 설치하고 일부 파일을 공유합니다. 그러면 로컬 시스템(cifs-utils 패키지가 이를 수행함)이 로컬 파일 시스템에 원격 위치를 마운트할 수 있습니다. 이렇게 하면 파일을 로컬로 복사하여 원격 호스트에 복사할 수 있습니다. 인증은 선택 사항이며 파일은 네트워크를 통해 일반 텍스트로 전송됩니다.
  • FTP. FTP 서버는 원격 측에 설치되며 특정 사용자가 특정 위치에 액세스할 수 있도록 구성됩니다. 그런 다음 FTP 클라이언트 또는 일부 FTP 클라이언트 라이브러리(예: Apache 프로젝트의 commons-net 라이브러리)를 사용하여 원격 FTP 서버에 연결하고 파일을 복사할 수 있습니다. 인증은 선택 사항이며 파일은 네트워크를 통해 일반 텍스트로 전송됩니다.

이 모든 것이 많은 작업처럼 보일 수 있으며, 대부분의 시스템에서 즉시 구현하고 구성할 수 있는 널리 채택된 표준화된 프로토콜이 없기 때문에 그렇습니다.

관련 정보