2011-10-05 18 views
6

다른 ssh 서버 뒤에서 서버로 ssh하고 싶습니다. 게이트웨이 서버에는 사용자 이름/암호가 필요하며이를 수행 할 수 있습니다. 다음 서버에 들어가기 위해 터널을 사용하고 있지만,이 중 하나는 에만 ssh 키가 필요합니다. PuTTY를 통해 키를 생성 했으므로 내 사용자 이름 용으로 존재하지만 Java 프로그램 용으로 검색하는 방법을 모르겠습니다. 구성입니까? 즉 setConfig ("userauth.publickey", "com.jcraft.jsch.UserAuthPublicKey") 그런 다음 어떻게 사용합니까? 문서가 드문 것처럼 보이고 도움을 주셔서 감사합니다. 내가 시도한 모든 것이 나에게 오류를 준다 :이 세션을 연결할 때 "인증 실패"JSch : ssh-keys를 사용하여 서버로 ssh하는 방법

고마워!

내가 사용하는 터널 방법은 다음과 같습니다. http://sourceforge.net/apps/mediawiki/jsch/index.php?title=ProxySSH 쓴 사람 덕분에!

문맥 상, Android 휴대 전화에서 학교의 서버로 읽고 쓰고 싶습니다.

답변

9

public-key authentication을 사용하려면 JSch.addIdentity 방법 중 하나를 사용해야합니다.

이들은 OpenSSH 키 형식의 공개 키와 개인 키를 사용하므로 PuTTY에서이 형식으로 내보내기해야합니다. (JSch는 PuTTY의 네이티브 형식을 이해하지 못한다. 비록 당신이 직접 Identity 인터페이스를 구현하는 어댑터를 작성할 수는 있지만).

JSch에 추가되는 ID는 세션 단위가 아닌 전체입니다. JSch는 자체와 서버가 모두 지원되는 모든 인증 방법을 순서대로 시도하고 공개 키 인증은 일반적으로 암호 인증 전에 시도하기 때문에 이는 일반적으로 문제가되지 않습니다.

모든 인증 방법에는 사용자 이름 (일반적으로 로그인 할 계정 이름)이 필요합니다.

공개 키 인증을 사용하면 공개 키를 이전에 서버에서 사용할 수 있어야합니다. OpenSSH의 sshd의 경우 공개 키는 ~/.ssh/authorized_keys이어야합니다. 공개 키가 하나 뿐인 경우이 파일에 복사하기 만하면 여러 파일을 하나의 행에 두어야합니다.

그래서 out-of- 신원을 설정 한 후 상자.

tunnelSession.setConfig("PreferredAuthentications", "password"); 

innerSession.setConfig("PreferredAuthentications", "publickey"); 

(: 당신은 확인하려면

확실히 첫 번째 세션은 암호 인증과 두 번째 (터널링) 하나가 전역 한 무시 당 세션 구성을 사용할 수 있습니다, 공개 키를 사용하여 사용 이것들은 각각 쉼표로 구분 된 하나의 요소입니다.

JSS의 저자 인 Atsuhiko Yamanaka의 도움을 받아 ProxySSH 예제에 대한 내용입니다. 이 정보를 위키 페이지에 추가해야합니다.

+0

두 번째 SSH는 사용자 이름을 사용하지 않으므로 세션을 인스턴스화 할 때 해당 필드에 대해 무엇을 사용해야합니까? 빈 문자열 또는 null? 즉 jsch.getSession (WHAT_GOES_HERE ?, hostname, 22); – Choobs

+0

인증 실패 오류가 계속 발생합니다. id_rsa 및 id_rsa.pub가 로컬에 저장되어 있고 OpenSSH 키로 내보내는 데 PuTTYgen을 사용하여 addIdentity (...)에 사용했습니다. 내가 놓친 게 있니? 첫 번째 서버에는 /.ssh/authorized_keys 파일이 있습니다.이 파일은 관련성이있는 경우 id_rsa.pub의 복사본입니다. – Choobs

+0

* 항상 * SSH 사용자 이름이 필요합니다.이 기능이 없으면 서버에 로그인 할 수 없습니다. (결국, 보낸 명령은 일부 로컬 사용자 계정에서 실행되어야합니다.) 그리고'.ssh/authorized_keys' 파일 (로그인이 허용 된 공개 키 포함)은 로그인하려는 사용자의 홈 디렉토리에 있어야합니다. –

관련 문제