Muszę użyć sshpass
do uruchomienia polecenia zdalnego za pośrednictwem SSH z kodu Java.
Jeśli ręcznie wpiszę w konsoli:
ssh -p 22 user@ipaddress mplayer '/media/data/myFavouriteSong.mp3'
działa idealnie, ale prosi o hasło. Więc próbowałem uruchomić 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'
i żaden z nich nie działa.
źródło
StrictHostKeyChecking=accept-new
.sshpass
działa tylko wtedy, gdy pytanie o hasło kończy się naassword:
.Jeśli monit o hasło jest inny, konieczne może być dostosowanie kodu źródłowego,
sshpass
aby rozpoznać monit.Widziałem monity o hasło, jak
Password for user@host:
w niektórych systemach, może to jest twój problem.źródło
-P prompt Which string should sshpass search for to detect a password prompt
Myślę, że chcesz czegoś takiego:
Na przykład to działa dla mnie:
źródło
Czy skonfigurowałeś logowanie bez hasła?
Logowanie bez hasła za pomocą OpenSSH http://www.debian-administration.org/articles/152
źródło
Jest na to wiele sposobów, oto moje sugerowane rozwiązanie:
Po pierwsze, przechowywanie hasła w zmiennej daje bardziej elastyczne polecenia.
sshpass
ma na to opcję:-e
: ta opcja pozwala odczytać hasło z$SSHPASS
zmiennej środowiskowejIstnieją dwa sposoby ustawienia tej zmiennej:
Ustaw bezpośrednio w kodzie:
Lub poproś o to:
Niż wykonajcie rozkaz;
Jeśli twoje polecenie jest statyczne, uruchom je bezpośrednio:
Jeśli twoje polecenie będzie dynamiczne, użyj następującego:
mam nadzieję, że to komuś pomoże.
źródło
readPassword
funkcji, możesz po prostu wpisać swoje hasło, to powinien działać :) Tylko chcę udostępnić mój kod, który pokazuje przykład przy użyciusshpass
poleceń dynamicznych: Dsshpass
używa pseudo terminali, aman
strona zawiera przeprosiny za okazjonalne złamanie. Możesz także spróbowaćfd0ssh
. Działa, jeśli nie musisz wysyłaćstdin
do procesu na zdalnym komputerze. Działa to, jeśli po prostu wydasz polecenie i przechwycisz wynik.źródło
Składnia sshpass to
Zauważ, że nie ma spacji między -p a hasłem.
Zauważyłem również, że musisz połączyć się z ssh przynajmniej raz ręcznie, aby uzyskać klucz RSA komputera, z którym się łączysz, aby przejść do
~/.ssh/known_hosts
pliku, zanim sshpass pozwoli ci się połączyć.więc po uzyskaniu wpisu w pliku znane_hosty mogę uruchomić polecenie takie jak
i wykona polecenie
uname -a
na zdalnym serwerze i wyśle wyniki do standardowego wyjścia na komputerze lokalnym.źródło
Potrzebujesz tego
-f -t -t -t
Dodatkowo może być konieczne usunięcie „Requtty” z konfiguracji sudo (/ etc / sudoers) na zdalnym komputerze.
źródło
zrób klucz
ssh-keygen -t rsa
utwórz folder .ssh na zdalnym serwerze, aby poprosił o hasło
ssh $USER@SEVERNAME mkdir -p .ssh
skopiuj klucz do zdalnego serwera
cat .ssh/id_rsa.pub | ssh $USER@SERVER 'cat >> .ssh/authorized_keys'
Sprawdź, czy prosi o hasło, jeśli nie, powinno działać.
źródło
@exhuma ma przykład, który doprowadził do tego, że działa dla mnie.
Hasło musi mieć postać
-pPassword
(bez spacji)konieczne mogą być również cytaty:
sshpass -p'Password&0' user@hostname
źródło