我经常编写一些软件,这些软件将被安排到服务器之间的SFTP文件中。我目前无法使用JSch连接到远程服务器。
我认为这源于我的程序正在运行的帐户以及使用密码加密的私有SSH密钥。
以下代码:
public SFTPDelivery(Environment environment) throws Exception {
super(environment);
String userName = System.getProperty("user.name");
String userDir = System.getProperty("user.home");
jsch.addIdentity(userDir + "//.ssh//id_rsa");
jsch.setKnownHosts(userDir + "//.ssh//known_hosts");
session = jsch.getSession(userName, environment.getRemoteServer(), 22);
session.setConfig("StrictHostKeyChecking", "yes");
session.setConfig("PreferredAuthentications", "publickey");
session.connect();
channel = (ChannelSftp) session.openChannel("sftp");
channel.connect();
}
抛出:
com.jcraft.jsch.JSchException: USERAUTH fail
at com.jcraft.jsch.UserAuthPublicKey.start(UserAuthPublicKey.java:119)
at com.jcraft.jsch.Session.connect(Session.java:463)
at com.jcraft.jsch.Session.connect(Session.java:183)
at xxx.xxx.xxx.xxx.SFTPDelivery.<init>(SFTPDelivery.java:30)
JSch希望通过加密身份传递密码。为了安全起见,我无法对密码进行硬编码。
我们的想法是,该程序将在QualAccount
上以QualServer
运行,并尝试通过SSH连接到QualAccount
上的DevServer
。 JSch失败,因为QualAccount
的id_rsa已加密,并且未包含所需的密码短语。
我为此写一个问题的原因是因为从QualAccount的终端,我能够在没有任何密码/密码提示的情况下SSH到另一个帐户/服务器。
如果帐户已经具有通过终端连接的必要SSH权限,那么JSch是否有办法不要求加密身份使用密码?
感谢。