Как я могу заставить JSch API входить на сервер Unix без пароля? - PullRequest
4 голосов
/ 10 мая 2011

Я пытаюсь создать приложение Java, которое выполняет сценарии оболочки на удаленном Unix-сервере, используя JSch API.

Мне было интересно, можно ли войти в системусервер без пароля.Если так - как?Должен ли я генерировать пару ключей аутентификации на серверах, а затем заставить приложение считывать информацию из файла ключей?

Приложение Java находится на станции Windows.

Ответы [ 4 ]

4 голосов
/ 26 сентября 2013

Поскольку потребовалось некоторое время, прежде чем он заработал, вот целый модифицированный пример:

JSch jsch=new JSch();
Session session=jsch.getSession("my_username", "my_host", my_port);
session.setConfig("PreferredAuthentications", "publickey");
jsch.setKnownHosts("~/.ssh/known_hosts");
jsch.addIdentity("~/.ssh/id_rsa");
session.setConfig("StrictHostKeyChecking", "no");
session.connect(30000);
Channel channel=session.openChannel("shell");
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect(3*1000);

Остерегайтесь того, скопировали ли вы ключ rsa или dsa на сервер и добавьте соответствующий идентификатор в строку addIdentity - id_rsa или id_dsa.

(cat .ssh / id_rsa.pub | ssh me @ servername 'cat >> .ssh /).

3 голосов
/ 22 февраля 2012

После того, как вы разобрались с ключами, есть единственная строка, позволяющая подключиться с помощью ключа, а не пароля:

JSch jsch = new JSch();
jsch.addIdentity(".ssh/privateKey.pem");

Метод addIdentity принимает единственный аргумент, который указывает на местоположение вашего файла закрытого ключа на вашем компьютере.

3 голосов
/ 10 мая 2011

Это, безусловно, выполнимо.Взгляните на каталог примеров, предоставляемый с jsch.

UserAuthPubKey.java показывает, как проходить аутентификацию с открытым ключом, а KeyGen.java показывает, как создавать открытый и закрытый ключи.

1 голос
/ 11 мая 2011

Как сказал jlliagre, это возможно.

Сгенерируйте пару ключей для вашего приложения, сделайте открытый ключ известным серверу (часто это можно ввести в ~/.ssh/authorized_keys, и *)1004 * передайте оба ключа клиентскому объекту JSch либо в виде файлов, либо в виде байта [].Возможно, вы также захотите изменить опцию PreferredAuthentications, чтобы разрешить только аутентификацию с открытым ключом, чтобы не запрашивать пароль или пытаться что-то еще.

Примечание: Если вы доставляете свое приложение на хосты, а неКонтролируемый вами, любой, кто может получить доступ к файлам приложения, может использовать закрытый ключ для входа на ваш сервер.

Таким образом, вы должны убедиться, что учетная запись не может сделать ничего вредного, или что клиентский компьютер (ваша учетная записьи любой привилегированный) находится под вашим (или только известным Friendlies ') полным контролем.(Шифрование секретного ключа парольной фразой не помогает, если парольная фраза распространяется вместе с вашей программой. Также ее нельзя поместить в файл jar программы.)

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