Как использовать sshpass?

Мне нужно использовать sshpass чтобы запустить удаленную команду через SSH из кода Java.

Если я вручную введу в консоль:

ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'

работает отлично, но запрашивает пароль. Поэтому я попробовал бежать sshpass:

sshpass -p mypass ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'sshpass -p mypass ssh -l user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'sshpass -p mypass ssh -t user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'sshpass -p mypass ssh user@ipaddress echo 'OK'

и ни один из них не работает.

Это может быть вызвано проверками ключа хоста, выполняемыми ssh. Это выглядит как sshpass хранит молчание о недопустимых ключах хоста (нет вывода ни на одном stderr ни stdout) и существует с кодом состояния 6. На момент написания этой статьи это была редакция 50, и соответствующая константа в коде равна RETURN_HOST_KEY_UNKNOWN, который намекает на эту ошибку.

Ваш код ошибки может отличаться, и просмотр кода, приведенного выше, может дать вам некоторое представление.

Если ваша проблема заключается в недопустимом ключе хоста, вам следует дважды подумать, прежде чем переопределять ошибку с помощью опции CLI. Ваша машина может быть скомпрометирована или вы можете подвергнуться MITM-атаке! Если вы на 100% уверены, что это не так, и если у вас нет средств для обновления проверенных ключей хоста, вы можете использовать следующую команду:

sshpass -pfoobar ssh -o StrictHostKeyChecking=no user@host command_to_run

sshpass команда работает только в том случае, если запрос пароля заканчивается на assword:.

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

Я видел подсказки пароля, такие как Password for user@host: в некоторых системах, возможно, это ваша проблема.

Я думаю, вы хотите что-то вроде:

sshpass -p yourpassword ssh user@ipaddress somecommand

Например, это работает для меня:

sshpass -p mypassword ssh username@10.0.0.9 touch foo
  1. сделайте ключ

    ssh-keygen -t rsa

  2. создайте папку .ssh на удаленном сервере, она запросит пароль

    ssh $USER@SEVERNAME mkdir -p .ssh

  3. скопируйте ключ на удаленный сервер

    cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'


Проверьте, запрашивает ли он пароль, если нет, он должен работать.

ssh $USER@SEVERNAME 'command'

синтаксис sshpass таков

sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments

Обратите внимание, что между -p и паролем нет пробела.

Также я заметил, что вам нужно подключиться по ssh хотя бы один раз вручную, чтобы получить ключ RSA компьютера, к которому вы подключаетесь, чтобы войти в ~/.ssh/known_hosts файл перед sshpass позволит вам подключиться.

итак, после получения записи в файле known_hosts я могу запустить такую команду, как

sshpass -ffilename_with_password_in_it ssh user@server uname -a

и он выполнит команду uname -a на удаленном сервере и выводите результаты в стандартный вывод на локальном компьютере.