이전에 SSH에 대한 원격 액세스를위한 코드 세트를 만들었습니다. 최근에 요구 사항이 있으며 대상 서비스에 액세스하기 위해 점프 기계를 통과해야합니다. 온라인으로 오랫동안 검색 한 후 더 나은 예를 찾을 수 없었기 때문에 JSCH API를 혼자서 살펴 보았습니다. 그러나 나는 안개 속에서 그것을 보았다. 결국, 나는 그것에 대해 생각합니다. 포트 전달의 원리는 대상 노드 IP를 매핑하기위한 원리입니다 : 포트로 LocalHost : Port, 그리고 LocalHost : Port를 통해 메시지를 보내 대상 노드에 도달합니까?
이 추론으로 이전 코드를 수정했습니다.
JSCH를 통해 대상 노드 서버에 연결되는 원래 코드에 대해서는별로 말하지 않습니다. 바이두를 사용하여 온라인으로 많은 사람들이 있습니다.
다음은 수정 된 코드입니다.
/ ** * 연결 가져옵니다 * @param IP Jump Host * @param username j } 세션 sshsession = null; jsch jsch = 새로운 jsch (); sshsession = jsch.getSession (username, ip, port); sshsession.setpassword (pwd); 속성 sshconfig = 새로운 속성 (); sshconfig.put ( "StricthostkeyChecking", "no"); sshconfig.put ( "preferredauthentications", "암호, 키보드 인터랙티브"); sshsession.setconfig (sshconfig); sshsession.connect (tmout); // 타임 아웃을 설정할 수 있습니다. // 로컬 sshsession에 매핑 된 포트의 일부를 설정할 수 있습니다. // 항소 매핑을 완료 한 후 세션 세션 = jsch.getSession ( "대상 서비스 사용자 이름", "127.0.0.1", 로컬 포트)에 연결할 수 있습니다. 속성 remotecfg = 새로운 속성 (); remotecfg.put ( "stricthostkeyChecking", "no"); remotecfg.put ( "preferredauthentications", "암호, 키보드 인터랙티브"); session.setConfig (remotecfg); SESSION.SETPASSWORD ( "대상 서비스 비밀번호"); session.connect (); // 미래에 직접 변경하는 방법은 무엇입니까? 온라인으로 사용되는 많은 채널이 있습니다. 채널 = (채널) session.openchannel ( "sftp"); // sftp 커뮤니케이션 채널 작성 채널 작성 .connect (); channelsftp sftp = (channelsftp) 채널; 반환 sftp; }
마지막으로 테스트는 SFTP를 통해 대상 노드 디렉토리에 액세스하는 데 사용되었으며 성공했습니다.
JSCH 프레임 워크를 사용하여 점프 머신을 통해 다른 노드에 액세스하는 위의 방법은 내가 공유하는 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.