2010-05-25 17 views
15

Tôi đang cố viết kịch bản lệnh Ant để truy xuất URL thông qua đường hầm cổng.com.jcraft.jsch.JSchException: Auth hủy

Nó hoạt động tuyệt vời khi tôi sử dụng một mật khẩu (tên xxxx'd ra cho sự riêng tư):

<project default="main"> 
    <target name="main"> 
    <sshsession host="xxxx" 
    username="xxxx" 
    password="xxxx"> 
     <LocalTunnel lport="1080" rhost="xxxx" rport="80"/> 
     <sequential> 
     <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/> 
     </sequential> 
    </sshsession> 
    </target> 
</project> 

Nhưng nó không hoạt động khi tôi sử dụng một keyfile, như thế này:

<sshsession host="xxxx" 
    username="xxxx" 
    keyfile="/Users/xxxx/.ssh/id_dsa" 
    passphrase="xxxx"> 
     <LocalTunnel lport="1080" rhost="xxxx" rport="80"/> 
     <sequential> 
     <get src="http://localhost:1080/xxxx" dest="/tmp/xxxx"/> 
     </sequential> 
    </sshsession> 

tôi nhận được ngoại lệ này:

/tmp/build.xml:8: com.jcraft.jsch.JSchException: Auth cancel 
    at com.jcraft.jsch.Session.connect(Session.java:451) 
    at com.jcraft.jsch.Session.connect(Session.java:150) 
    at org.apache.tools.ant.taskdefs.optional.ssh.SSHBase.openSession(SSHBase.java:223) 
  • tôi chắc rằng tôi đang sử dụng c orrect keyfile (Tôi đã thử sử dụng tên sai, cung cấp một FileNotFoundException hợp lệ).
  • Tôi có thể thành công ssh từ dòng lệnh mà không bị nhắc nhập mật khẩu.
  • Tôi chắc chắn rằng tôi đang sử dụng cụm mật khẩu chính xác cho keyfile.

Nguyên nhân của lỗi này là gì và tôi có thể làm gì với nó?

+0

Ugh, tôi tải về các nguồn và dường như Jsch nuốt lý do JSchAuthCancelException và chỉ báo cáo "AuthCancel". Có ai muốn gỡ lỗi không? –

Trả lời

30

Tôi đã gỡ lỗi mã. Điều này đã thất bại vì khóa riêng của tôi không xác thực; JSch âm thầm quay trở lại để xác thực mật khẩu, đã bị hủy bỏ, bởi vì tôi đã không chỉ định một mật khẩu.

Xử lý lỗi JSch hút rất nhiều. Hãy nhớ lại các bước của bạn, tạo lại một tệp khóa riêng (riêng), sử dụng ssh -i để đảm bảo bạn đang sử dụng đúng tệp và giữ cho các ngón tay của bạn vượt qua.

0

Hiện có một ngã ba thương hiệu mới của Jsch. Việc xử lý ngoại lệ là toàn diện hơn nhiều. Không nuốt hoặc mặc định nữa. Đi qua số https://github.com/vngx/vngx-jsch để xem. Nếu một cái gì đó không hoạt động theo cách bạn mong đợi, hãy nêu nó như một vấn đề, hoặc gửi một yêu cầu kéo khi chúng tôi chủ động duy trì nó. Chúng tôi cũng đang tìm cách để có được nó trên repos trung tâm maven sớm.

+0

Tuyên bố này mâu thuẫn với những gì được viết về vấn đề này nói rằng vngx-jsch không phải là sự thay thế cho tác vụ kiến ​​https://github.com/vngx/vngx-jsch/issues/10 – opticyclic

+0

Nhận xét này không theo bất kỳ cách nào đề nghị rằng nó là một giọt thay thế ... Nó nói nếu một cái gì đó không hoạt động theo cách bạn mong đợi, đó là phương tiện dựa trên tài liệu KHÔNG dựa trên JSCH. Do đó dòng đầu tiên: Bây giờ có một FORK mới của Jsch. Sự cố đã bị đóng vì nó đang hoạt động như được thiết kế. – Scott

3

Tôi gặp sự cố tương tự khi sử dụng tác vụ sshexec. Tôi cũng thêm cụm từ mật khẩu và nó hoạt động tốt. tạo cụm mật khẩu cho khóa riêng của bạn và thêm cụm từ này làm thuộc tính trong tác vụ của bạn. Cũng đừng quên chuyển đổi khóa riêng của bạn để mở định dạng ssh nếu bạn tạo khóa bằng cách sử dụng puttygen trên các cửa sổ.

1

Tôi đã có một vấn đề tương tự ngay hôm nay. Vì vậy, tôi nghĩ rằng tôi sẽ chia sẻ giải pháp của tôi là tốt. Tôi có ngoại lệ tương tự nhưng vấn đề là trong thực tế rằng tôi đã có một âm sắc trong mật khẩu của tôi. sau khi chọn một mật khẩu mới mà không có mọi thứ hoạt động tốt.

5

Để có được kết nối jsch hoạt động, bạn phải chỉ định đường dẫn tới cả tệp known_hosts và tệp có chứa khóa cá nhân. Việc này được thực hiện bằng các phương thức setKnownHostsaddIdentity.

 jsch.setKnownHosts("/path/to/.ssh/known_hosts"); 
     jsch.addIdentity("/path/to/.ssh/id_rsa"); 

Nếu khóa có một cụm mật khẩu, bạn có thể thêm nó vào danh sách addIdentity luận:

 jsch.addIdentity("/path/to/.ssh/id_rsa", myPassPhrase); 

See Javadocs