2017-03-31 1 views
1

현재 Windows에서 Linux 호스트 서버에 연결할 때 .bat 파일에 내 자격 증명을 사용하여 퍼티를 사용하여 자동으로 컴퓨터에 액세스합니다. 그러나 연결이 나를 자동으로 터미널 쉘로 안내하지는 않지만 수동으로 다른 사용자 이름과 암호를 입력해야하는 보조 대화 형 로그인 프롬프트가 있습니다. 지금 자동화를 통해이를 전달하는 방법을 알지 못합니다.SSH 용 Java API 보조 로그인 확인

제 질문은 자바 또는 그냥 .bat에서 이러한 것들을 자동화하는 것이 가능합니까?

동료 중 한 명이 "sendkey"방법을 사용하여 VB 스크립트에서이 작업을 수행했습니다. 온라인 정보 "sendkey"는 하나 이상의 키 입력을 키보드에서 입력 된 것처럼 활성 창에 보냅니다. JSCH 또는 SSHJ에서 Java의 sendkey에 해당하는 부분이 있습니까?

참고 : 저는 터미널에 직접 연결 한 후 아니에요, 나는 sendkey가하는 것처럼 수동으로 입력하는 것처럼 대화 형 로그인을 자동화하는 것입니다.

답변

1

입력 된 문자를 ssh 세션에 주입하는 것은 매우 간단합니다. sshj에서 제공하는 OutputStream에 쓰여지는 문자를 주입하십시오. 로그인하고 대화 형 콘솔 로그인이 필요한 항목을 실행한다고 가정합니다.

test.sh이라는 간단한 스크립트를 사용하여 실행 된 프로세스를 시뮬레이트합니다. 입력 된 행을 읽고 인쇄합니다.

#/bin/bash 
read varname 
echo You typed $varname 

내가 수정 Exec example sshj에서 사용이 스크립트를 실행 오전 : 당신이 sshj 코드를 사용하여 스크립트를 실행하면 당신은 1,234,567

를 입력하면 결과를

을 얻을 것이다

final Session session = ssh.startSession(); 
try { 
    Command cmd = session.exec("/home/username/test.sh"); 
    OutputStream out = cmd.getOutputStream(); 
    out.write("1234567\n".getBytes()); // we type 1234567 
    out.flush(); 
    System.out.println(IOUtils.readFully(cmd.getInputStream()).toString()); 
    cmd.join(5, TimeUnit.SECONDS); 
    System.out.println("\n** exit status: " + cmd.getExitStatus()); 
} finally { 
    session.close(); 
} 

inputStream 행을 다음과 같이 읽을 수 있습니다. 라인에서 사용자 이름이나 암호를 묻는 줄을 기다리고 서버에 올바른 데이터를 보내 사용자의 입력을 시뮬레이션 할 수 있습니다.