2012-06-28 6 views
0

나는이 문제에 관해 많은 스레드가 있다는 것을 알고 있지만 나는 올바르게 발견하지 못했다. 나는이 예제를 따른다 : Want to invoke a linux shell command from Java 명령을 실행한다. ssh 명령의 문제점이 인증 중입니다. 실행할 때 암호를 설정해야합니다자바 코드에서 ssh bash 명령을 실행하는 방법은 무엇입니까?

$ ssh [email protected] 'fgrep Exception *.log*' 
Enter passphrase for key '/././.ssh/id_rsa': 

어떻게 암호를 여기에 입력 할 수 있습니까?

답변

1

의 읽기 되세요. Java Secure Channel (JSCH)은 매우 인기있는 라이브러리로 maven, ant 및 eclipse에서 사용됩니다. BSD 스타일 라이센스가있는 오픈 소스입니다.

ssh에 대한 인증이 필요한 경우 java를 통해 사용할 수 있습니다.

패스워드 패스를 통과해야하는 경우, 원하는대로 할 수있는 두 가지 방법이 있습니다. 하나는 저장된 암호를 포함하고 하나는 포함하지 않습니다.

둘 다 비대화 형입니다. 즉, 암호를 입력하지 않아도 작동 할 수 있습니다.

  1. 암호가 필요없는 방식입니다. SSH가있는 암호 대신 공개/개인 키 인증을 사용할 수 있습니다. 나는 으로 가고 있는데, 실질적으로 모든 리눅스 배포판에 포함 된 OpenSSH를 사용하고 있다고 가정합니다.

    단계 :

    • 구성 개인 키 로그인을 수락하려면 SSH 서버입니다./etc/ssh/sshd_config에는 PubkeyAuthentication yes라는 ​​줄이 있고 (그곳에 # 정보가 없다는 것을) 확인하십시오. 이 파일을 변경하면 sshd 서비스를 다시 시작해야합니다.

      로컬 컴퓨터에
    • (서버가 아닌)로 자신에게 키 쌍을 생성 SSH-Keygen은 -t RSA (당신은 RSA 이외의 다른 옵션을 사용할 수 있습니다,하지만 난 그것을 간단한 유지하고 있습니다). 암호를 지정하지 마십시오. 키를 저장할 위치에 저장하십시오.

    • 방금 ​​작성한 id_rsa.pub 파일의 내용을 열어 (매우 긴 텍스트 행 하나임) 서버 시스템의 $ HOME/.ssh/authorized_keys 파일 끝에 내용을 복사하십시오. 파일이 없으면 만듭니다.

    Further Detail refer here.

  2. 기본 아이디어는 메시지가 나타날 때 관리 자동화 도구 인 expect를 사용하여 ssh에 암호를 입력하는 것입니다. 그것은 항상 작동하지 않을 수도 있고 그렇지 않을 때, 어려울 수도 있습니다. 이유를 알아내는 것이 어렵습니다. 나는 첫번째 방법을 추천한다.

    어쨌든 여기에있는 명령은 사용자가 이 원하는 것을 수행 할 때까지 누를 수 있습니다.

스크립트 코드는 다음과 같습니다

expect -c 'spawn ssh [email protected] ; expect assword ; send "passphrase\n" ; interact' 

시스템에 설치되지 않을 수 있습니다 기대합니다. 설치 여부 확인하기

0

실행중인 InputStream을 가져 와서 암호를 묻는 메시지가 나타날 때까지 기다린 다음 OutputStream을 가져 와서 명령을 입력해야합니다. 필요.

이 라이브러리는 SSH를 호출 할 수 있습니다 this article

관련 문제