Загрузка закрытого ключа из строки или ресурса в Java JSch в приложении Android - PullRequest
3 голосов
/ 25 июня 2019

Я пишу приложение, которое должно получить доступ к моему частному серверу через SSH, используя JSch. Так как я установил аутентификацию с открытым ключом, я хочу, чтобы это приложение аутентифицировалось таким же образом. Я буду единственным, кто использует это приложение, поэтому я хочу хранить свой ключ либо непосредственно внутри приложения (например, жестко запрограммировано), либо отдельно где-то в домашнем каталоге моего телефона. Какой будет лучший способ сохранить его, возможно, в виде файла ресурсов внутри проекта? Так как я довольно новичок в разработке для Android, я не уверен, что для этого лучше.

Что я пробовал:

// [...]
String user = "my_user";
String ssh_pwd = "my_pwd";
String host = "my_host";
// stored as OpenSSH key - file not found error - where shoud I move this file?
String private_key = "./my_pk";

int port = 22;

// basic SSH connection stuff
JSch jsch = new JSch();
session = jsch.getSession(user, host, port);
jsch.addIdentity(private_key, ssh_pwd.getBytes());

Другой способ:

// [...]
// private key in OpenSSH format as a plain string
String private_key = "xyz123abc456def789ghi012..."; 
// public key in OpenSSH format as a plain string
String public_key = "a1b2c3d4e5..."; 
// [...]
jsch.addIdentity("id_rsa", private_key.getBytes(), public_key.getBytes(), ssh_pwd.getBytes());

Последнее привело к ошибке «неверный приватный ключ» . Кроме того, я не уверен, какой из этих двух способов является более безопасным для работы.

Заранее спасибо.

1 Ответ

3 голосов
/ 27 июня 2019
String private_key = "xyz123abc456def789ghi012..."; // private key in OpenSSH format as a plain string
String public_key = "a1b2c3d4e5..."; // public key in OpenSSH format as a plain string

JSch.addIdentity (и в конечном итоге KeyPair.load) принимает буфер, который содержит содержимое файлов пары ключей, сгенерированных ssh-keygen ( с -m pem в последних версиях OpenSSH).

Форматы такие:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAvc04a8wViYV5Kb4jX+MxEqN1vi9q9C7mPhf6DV+mb1ADNAiR
YeLqPMLCYUF2ViobcGfarb51gz7iB2TgkDmhQNK9XDCOUaGYN/FeZcN0JpzkjEjZ
ApbRfshj1h9qKQUW+38XKnltMtf4dxiuxkXph8P6IMVveTDs3sSbBPq560bdJ1AD
...
PEyVxlat2I4ShuLQiO1QIuS8ABu5yDM2EouB6vlxtGEBpIJItp7cyA==
-----END RSA PRIVATE KEY-----
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9zThrzBWJhXkpviNf4zESo3W+L2r0LuY+F/oNX6ZvUAM0CJFh4uo8wsJhQXZWKhtwZ9qtvnWDPuIHZOCQOaFA0r1cMI5RoZg38V5lw3QmnOSMSNkCltF+yGPWH2opBRb7fxcqeW0y1/h3GK7GRemHw/ogxW95MOzexJsE+rnrRt0nUAOu4hHjL6G/nlvdJ1jjZ06NwhYkbAxRoJkHUJTtMT2IL5ZmdAf37KHSPqZS32pLxQDmPutZxpIwlhz4aR78ZGp4+57mR069Y4at09GF0UmgtIiLjlKUexMf5sueVQ8LKhME6vOupMzTbiFEB3UJNq8d9Yx5i+c/IRHUIcI1 marti@MartinuvOmen

Это не тот формат, который у вас есть в private_key и public_key.


См. Также JSch для добавления закрытого ключа из строки .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...