Мне нужно использовать 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'
и никто из них не работает.
источник
StrictHostKeyChecking=accept-new
.sshpass
работает только в том случае, если запрос пароля заканчиваетсяassword:
.Если ваша подсказка пароля отличается, вам, возможно, придется изменить исходный код,
sshpass
чтобы распознать вашу подсказку.Я видел пароли, как
Password for user@host:
в некоторых системах, возможно, это ваша проблема.источник
-P prompt Which string should sshpass search for to detect a password prompt
Я думаю, что вы хотите что-то вроде:
Например, это работает для меня:
источник
Вы установили логин без пароля?
Вход в систему без пароля с OpenSSH http://www.debian-administration.org/articles/152
источник
Есть много способов сделать это, вот мое предлагаемое решение:
Прежде всего, хранение вашего пароля в переменной дает вам более гибкие команды.
sshpass
есть вариант для этого:-e
: эта опция позволяет читать пароль из$SSHPASS
переменной окруженияУ вас есть два способа установить эту переменную:
Установите прямо в своем коде:
Или попросить об этом:
Чем выполнить вашу команду;
Если ваша команда статическая, запустите ее напрямую:
Если ваша команда будет динамической, используйте вот так:
надеюсь, это поможет кому-то.
источник
readPassword
функцию, вы можете просто написать свой пароль, это должен работать :) Только я хочу поделиться своим кодом, который показывает пример использованияsshpass
для динамических команд: Dsshpass
использует псевдотерминалы, иman
страница содержит извинения за случайные нарушения. Вы также можете попробоватьfd0ssh
. Это работает, если вам не нужно отправлятьstdin
процесс на удаленную машину. Это работает, если вы просто выполните команду и получите результат.источник
синтаксис sshpass
Обратите внимание, что между -p и паролем нет пробела.
Также я заметил, что вам необходимо хотя бы один раз подключиться к ssh вручную, чтобы получить ключ RSA компьютера, к
~/.ssh/known_hosts
которому вы подключаетесь , чтобы войти в файл, прежде чем sshpass позволит вам подключиться.поэтому после получения записи в файле known_hosts я могу выполнить команду, такую как
и он выполнит команду
uname -a
на удаленном сервере и выведет результаты на стандартный выход на локальном компьютере.источник
Что вам нужно
-f -t -t -t
Кроме того, вам может потребоваться удалить «requiretty» из конфигурации sudo (/ etc / sudoers) на удаленной машине.
источник
сделать ключ
ssh-keygen -t rsa
создайте папку .ssh на удаленном сервере, он попросит пароль
ssh $USER@SEVERNAME mkdir -p .ssh
скопировать ключ на удаленный сервер
cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'
Проверьте, запрашивает ли он пароль, если нет, он должен работать.
источник
У @exhuma был пример, который привел меня к работе.
Пароль должен быть в форме
-pPassword
(без пробела)Также могут быть необходимы кавычки:
sshpass -p'Password&0' user@hostname
источник