我正在尝试从 sftp 服务器获取文件,但即使我尝试了许多不同的方法,它仍然给我一个错误 userauth.UserAuthenticationExeption: "Exhausted available authentication methods" 和 IllegalStateException: "Not authenticated"
使用 putty 和 app PSFTP,我可以使用 key.ppk、用户名和密码轻松登录服务器。在 PSFTP 身份验证中工作得很好。
我的 key.ppk 看起来像:
PuTTy-User-Key-File-2: ssh-rsa
Encryption: none
Comment: rsa-key-randomInt
Private-Lines: randomInt
Some random key
还有几行,就像我说的,使用 PSFTP 我可以使用这个密钥登录,所以我知道它可以工作。
我的代码示例:
var client = new SSHClient();
client.setTimeout(config.getTimeout());
client.setConnectTimeout(config.getTimeout());
client.addHostKeyVerifier(new PromiscuousVerifier());
try{
client.connect(config.getHost, config.getPort());
} catch (IOException e){
e.printStackTrace();
}
var passwordAuth = ObjectUtils.isEmpty(config.getPassword())
? List<AuthMethod>empty()
: List.of<new AuthPassword(PasswordUtils.createOneOff(config.getPassword.toCharArray()));
List< ? extends AuthMethod> key = null;
try{
key = ObjectUtils.isEmpty(config.getPrivateKey())
? List<AuthMethod>empty()
: List.of(new AuthPublicKey(createKeyProvider()));
}
createKeyProvider KeyPairWrapper createKeyProvider() throws IOException{
PuttyKeyFile puttyKeyFile = new PuttyKeyFile();
putyKeyfile.init(new File(path));//it works, in debug it shows proper object with values
return new KeyPairWrapper(new KeyPair(puttyKeyFile.getPublic(), puttyKeyFile.getPrivate))
}
var authMethods = List.of(passwordAuth).<AuthMethod>flatMap(Function.identity());
try{
client.auth(
config.getUsername(),
authMethods
);
}catch(UserAuthException e){
e.printStackTrace();
}
如果我打错了,我很抱歉,但我需要重写代码示例而不是复制粘贴。
在我开始工作之前,此代码的一部分是由其他人(无法帮助我)编写的。我认为我需要使用用户名、密钥和密码登录。我尝试仅使用 client.auth(username, password) 或 client.auth(username, key) 登录,但它不起作用,当我尝试使用 PSFTP 登录时,我需要使用这 3 个东西。
我认为问题出在 AuthPublicKey 中,我尝试添加许多不同的对象,例如:KeyPair、KeyPairWrapper、client.loadKey(fileLocation)、client.loadKey(keyPair)。
我还将这个 ppk 文件转换为其他格式,并尝试获取密钥,但它仍然给出相同的错误。
我尝试的另一件事是不提供端口,多次检查配置,当我使用 PSFTP 登录服务器时,我复制了值以检查是否没有拼写错误。
我开始失去理智寻找新的选择来解决它。在完美的情况下,我想从配置文件中获取我的密钥,我也尝试过这样做,但我仍然在这里。
如果您有如何获得身份验证的解决方案,或者只是知道可能出了什么问题,我将不胜感激。
谢谢你们,我会得到任何帮助。