2011-10-05 38 views
6

Tôi muốn ssh vào một máy chủ từ phía sau một máy chủ ssh. Máy chủ cổng yêu cầu tên người dùng/mật khẩu và tôi có thể thực hiện việc này. Tôi đang sử dụng đường hầm để vào máy chủ tiếp theo, nhưng yêu cầu này chỉ yêu cầu chỉ khóa ssh. Tôi đã tạo khóa thông qua PuTTY, vì vậy nó tồn tại cho tên người dùng của tôi nhưng tôi không chắc chắn làm thế nào để lấy nó cho chương trình Java của tôi. Nó là một cấu hình? tức là setConfig ("userauth.publickey", "com.jcraft.jsch.UserAuthPublicKey") thì làm cách nào để sử dụng cái này hay cái gì khác? Tài liệu dường như thưa thớt và tôi đánh giá cao bất kỳ sự trợ giúp nào. Bất kỳ điều gì tôi đã thử cung cấp cho tôi lỗi: "Xác thực không thành công" khi tôi kết nối phiên nàyJSch: Làm thế nào để ssh vào một máy chủ bằng cách sử dụng ssh-keys

Cảm ơn!

Phương pháp đường hầm tôi sử dụng là: http://sourceforge.net/apps/mediawiki/jsch/index.php?title=ProxySSH vì vậy, nhờ có người đã viết nó!

Đối với ngữ cảnh, tôi muốn đọc/ghi vào máy chủ tại trường học của mình từ điện thoại Android của tôi.

Trả lời

9

Để bật public-key authentication, bạn phải sử dụng một trong các phương pháp JSch.addIdentity.

Đây là khóa công khai và riêng tư theo định dạng khóa OpenSSH - vì vậy hãy đảm bảo bạn xuất nó từ PuTTY theo định dạng này. (JSch không hiểu định dạng gốc của PuTTY, mặc dù bạn có thể viết một adapter thực hiện giao diện Identity, tự phân tích nó).

Danh tính được thêm vào JSch là toàn cầu, không phải mỗi phiên. Đây thường không phải là vấn đề, vì JSch sẽ thử tất cả các phương thức xác thực được hỗ trợ bởi chính nó và máy chủ theo thứ tự, và xác thực khóa công khai là bình thường trước khi xác thực mật khẩu.

Tất cả các phương thức xác thực cần tên người dùng (thường là tên của tài khoản được đăng nhập).

Với xác thực khoá công khai, khóa công khai phải bằng cách nào đó trước đây có sẵn cho máy chủ. Đối với sshd của OpenSSH, khóa công khai sẽ được liệt kê trong ~/.ssh/authorized_keys. (Nếu bạn chỉ có một khóa công khai, chỉ cần sao chép tệp đó vào tệp này, nếu bạn có nhiều tệp đó (mỗi tệp sẽ được cho phép), mỗi tệp phải có một dòng.)

Vì vậy, nó sẽ hoạt động ngoài hộp sau khi thiết lập danh tính.

Nếu bạn muốn chắc chắn phiên đầu tiên sử dụng xác thực mật khẩu và lần thứ hai (đường hầm) có ai sử dụng khóa công khai, bạn có thể sử dụng cấu hình mỗi phiên, trọng toàn cầu một:

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

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

(Đây là các danh sách được phân tách bằng dấu phẩy, mỗi phần tử có một dấu phẩy.)

Về ví dụ ProxySSH, đó là bởi tôi (với sự trợ giúp của tác giả JSch, Atsuhiko Yamanaka). Tôi nên thêm thông tin này vào trang Wiki, có thể.

+0

Vì SSH thứ hai không có tên người dùng, tôi nên sử dụng thông tin gì cho trường đó khi khởi tạo phiên? Một chuỗi rỗng hoặc null? tức là jsch.getSession (WHAT_GOES_HERE ?, tên máy chủ, 22); – Choobs

+0

Tôi tiếp tục gặp lỗi Auth Fail. Tôi có id_rsa và id_rsa.pub được lưu trữ cục bộ và tôi đã sử dụng PuTTYgen để xuất dưới dạng khóa OpenSSH, sau đó sử dụng nó trong addIdentity (...). Tui bỏ lỡ điều gì vậy? Trên máy chủ đầu tiên có tệp /.ssh/authorized_keys, là bản sao của id_rsa.pub, nếu có liên quan. – Choobs

+0

Bạn * luôn * cần tên người dùng cho SSH - bạn không thể đăng nhập vào máy chủ mà không có điều này. (Sau khi tất cả, các lệnh được gửi sau đó phải được thực hiện trong một số tài khoản người dùng cục bộ.) Và '.Tệp ssh/authorized_keys' (chứa các khóa công cộng được phép đăng nhập) phải nằm trong thư mục chính của người dùng mà bạn muốn đăng nhập. –

Các vấn đề liên quan