Как я могу использовать ключ из AndroidKeyStore вместо пароля для аутентификации моего клиентского соединения SSH?Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу использовать ключ из AndroidKeyStore вместо пароля для аутентификации моего клиентского соединения SSH?

Сообщение Anonymous »

Мне удалось установить соединение с использованием аутентификации по паролю, используя следующий метод.

Код: Выделить всё

protected String sshConnect(String username, String password, String host, int port, long defaultTimeoutSeconds, String command) {
ClientChannel channel;
String responseString = null;
// create a client instance
try (SshClient client = SshClient.setUpDefaultClient()) {
//client.setForwardingFilter(AcceptAllForwardingFilter.INSTANCE); //?
client.start();
Log.d(TAG, "sshConnect(): client.start(): client started");

// connection and authentication
try (ClientSession session = client.connect(username, host, port).verify(TimeUnit.SECONDS.toMillis(defaultTimeoutSeconds)).getSession()) {
Log.d(TAG, "ssh: client.connect()");
session.addPasswordIdentity(password);
//session.addPublicKeyIdentity();
session.auth().verify(TimeUnit.SECONDS.toMillis(defaultTimeoutSeconds));
Log.d(TAG, "ssh: connection established");

// create a channel to communicate
channel = session.createChannel(Channel.CHANNEL_SHELL);
Log.d(TAG, "ssh: starting shell");

ByteArrayOutputStream responseStream = new ByteArrayOutputStream();
channel.setOut(responseStream);

// open channel
channel.open().verify(5, TimeUnit.SECONDS);

try (OutputStream pipedIn = channel.getInvertedIn()) {
pipedIn.write(command.getBytes());
pipedIn.flush();
}

// close channel
channel.waitFor(EnumSet.of(ClientChannelEvent.CLOSED),
TimeUnit.SECONDS.toMillis(5));

// output after converting to string type
responseString = responseStream.toString();
Log.d(TAG, "ssh: responseString == " + responseString);

} catch (Exception e) {
Log.d(TAG, "sshConnect(): client.connect(): Exception: " + e);
}
} catch (Exception e) {
Log.d(TAG, "sshConnect(): client.start(): Exception: " + e);
}
return responseString;

}
После установления соединения я устанавливаю пароль. Я полагаю, что именно здесь я бы вместо этого установил ключ.

Код: Выделить всё

session.addPasswordIdentity(password);
//session.addPublicKeyIdentity();
Открытый ключ находится на сервере. Использую ли я .addPublicKeyIdentity() на клиенте? Или поток совершенно другой, если я использую ключ для аутентификации? Мне кажется любопытным, что пароль устанавливается только после попытки подключения.

Подробнее здесь: https://stackoverflow.com/questions/784 ... cate-my-ss
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»