자바 원 격 으로 셸 스 크 립 트 를 호출 하고 출력 정 보 를 가 져 옵 니 다[추천]
<dependency>
<groupId>ch.ethz.ganymed</groupId>
<artifactId>ganymed-ssh2</artifactId>
<version>262</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
2、Api 설명먼저 연결 기 를 만들어 로그 인 할 ip 주 소 를 입력 합 니 다.
Connection conn = new Connection(ipAddr);
로그 인 목적 서버 를 모 의 하여 사용자 이름과 비밀 번 호 를 입력 합 니 다.
boolean isAuthenticated = conn.authenticateWithPassword(userName, passWord);
이것 은 불 값 을 되 돌려 줍 니 다.true 는 목적 서버 에 성공 적 으로 로그 인 하지 않 으 면 로그 인 에 실 패 했 습 니 다.session 을 열 고 필요 한 Liux 스 크 립 트 명령 을 실행 합 니 다.
Session session = conn.openSession();
session.execCommand(“ifconfig”);
대상 서버 의 콘 솔 을 받 아 결 과 를 되 돌려 주 고 br 의 내용 을 읽 습 니 다.
InputStream stdout = new StreamGobbler(session.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
스 크 립 트 실행 성공 여 부 를 표시 합 니 다:0-성공 비 0-실패
System.out.println(“ExitCode: ” + session.getExitStatus());
session 과 connection 닫 기
session.close();
conn.close();
Tips:두 번 째 인증 에 성공 하면 현재 디 렉 터 리 는
/home/username/
디 렉 터 리 아래 에 있 습 니 다.스 크 립 트 파일 이 있 는 절대 경 로 를 지정 하거나 cd 를 통 해 스 크 립 트 파일 이 있 는 디 렉 터 리 로 탐색 한 다음 스 크 립 트 를 실행 하 는 데 필요 한 인 자 를 전달 하여 스 크 립 트 호출 을 완료 할 수 있 습 니 다.스 크 립 트 를 실행 한 후에 스 크 립 트 가 실 행 된 결과 텍스트 를 가 져 올 수 있 습 니 다.이 텍스트 들 을 정확하게 인 코딩 한 후에 클 라 이언 트 에 게 되 돌려 서 코드 가 흐 트 러 지지 않도록 해 야 합 니 다.
만약 에 여러 개의 Liux 콘 솔 스 크 립 트 를 실행 해 야 한다 면 첫 번 째 스 크 립 트 의 반환 결 과 는 두 번 째 스 크 립 트 의 입 참 이다.여러 개의 Session 을 열 어야 한다.즉,여러 번 호출
Session sess = conn.openSession();,
을 사용 하고 닫 으 면 된다.3.인 스 턴 스:도구 클래스
public class SSHTool {
private Connection conn;
private String ipAddr;
private Charset charset = StandardCharsets.UTF_8;
private String userName;
private String password;
public SSHTool(String ipAddr, String userName, String password, Charset charset) {
this.ipAddr = ipAddr;
this.userName = userName;
this.password = password;
if (charset != null) {
this.charset = charset;
}
}
/**
* Linux
*
* @return
*/
private boolean login() {
conn = new Connection(ipAddr);
try {
//
conn.connect();
//
return conn.authenticateWithPassword(userName, password);
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
/**
* Shell
*
* @param cmds
* @return
*/
public StringBuilder exec(String cmds) throws IOException {
InputStream in = null;
StringBuilder result = new StringBuilder();
try {
if (this.login()) {
//
Session session = conn.openSession();
session.execCommand(cmds);
in = session.getStdout();
result = this.processStdout(in, this.charset);
conn.close();
}
} finally {
if (null != in) {
in.close();
}
}
return result;
}
/**
*
*
* @param in
* @param charset
* @return
*/
public StringBuilder processStdout(InputStream in, Charset charset) throws FileNotFoundException {
byte[] buf = new byte[1024];
StringBuilder sb = new StringBuilder();
// OutputStream os = new FileOutputStream("./data.txt");
try {
int length;
while ((length = in.read(buf)) != -1) {
// os.write(buf, 0, c);
sb.append(new String(buf, 0, length));
}
} catch (IOException e) {
e.printStackTrace();
}
return sb;
}
public static void main(String[] args) throws IOException {
SSHTool tool = new SSHTool("192.168.100.40", "root", "123456", StandardCharsets.UTF_8);
StringBuilder exec = tool.exec("bash /root/test12345.sh");
System.out.println(exec);
}
}
총결산위 에서 말 한 것 은 소 편 이 소개 한 자바 원 격 으로 셸 스 크 립 트 를 호출 하고 출력 정 보 를 얻 는 것 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
만약 당신 이 본문 이 당신 에 게 도움 이 된다 고 생각한다 면,전 재 를 환영 합 니 다.번 거 로 우 시 겠 지만 출처 를 밝 혀 주 십시오.감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.