繁体   English   中英

JSch:如何使用ssh-key ssh到服务器

[英]JSch: How to ssh into a server using ssh-keys

我想从另一个ssh服务器后面ssh到服务器。 网关服务器需要用户名/密码,我可以这样做。 我使用的是隧道进入下一个服务器,但是这一次需要一个SSH密钥。 我已经通过PuTTY生成了密钥,因此它存在我的用户名,但我不确定如何为我的Java程序检索它。 这是配置吗? 即setConfig(“userauth.publickey”,“com.jcraft.jsch.UserAuthPublicKey”)然后如何使用这个或其他东西? 文档似乎很少,我感谢任何帮助。 我试过的任何东西都会给我一个错误:当我连接这个会话时“Auth fail”

谢谢!

我使用的隧道方法是: http//sourceforge.net/apps/mediawiki/jsch/index.php?title=ProxySSH所以感谢写这篇文章的人!

对于上下文,我想从我的Android手机读取/写入我学校的服务器。

要启用公钥验证 ,您必须使用其中一个JSch.addIdentity方法。

它们采用OpenSSH密钥格式的公钥和私钥 - 因此请确保以此格式从PuTTY导出它。 (JSch不了解PuTTY的本机格式,但您可以编写实现Identity接口的适配器,自己解析它)。

添加到JSch的身份是全局的,而不是每个会话。 这通常不是问题,因为JSch将尝试按顺序由自身和服务器支持的所有身份验证方法,并且公钥验证通常在密码验证之前。

所有身份验证方法都需要用户名(通常是要登录的帐户的名称)。

使用公钥验证时,公钥必须以某种方式以前可供服务器使用。 对于OpenSSH的sshd,公钥应列在~/.ssh/authorized_keys (如果您只有一个公钥,只需将其复制到此文件中,如果您有多个公钥(每个公钥都允许),则每个公钥都应该在一行上。)

所以它应该在设置身份后开箱即用。

如果要确保第一个会话使用密码身份验证而第二个(隧道)使用公钥,则可以使用每会话配置,覆盖全局配置:

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

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

(这些是以逗号分隔的列表,每个都有一个元素。)

关于ProxySSH的例子,就是我(在JSch的作者Atsuhiko Yamanaka的帮助下)。 我应该将这些信息添加到Wiki页面。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM