Najpierw musisz zainstalować sshpass .
- Ubuntu / Debian:
apt-get install sshpass
- Fedora / CentOS:
yum install sshpass
- Łuk:
pacman -S sshpass
Przykład:
sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM
Przykład niestandardowego portu:
sshpass -p "YOUR_PASSWORD" ssh -o StrictHostKeyChecking=no YOUR_USERNAME@SOME_SITE.COM:2400
Uwagi:
sshpass
może również odczytać hasło z pliku po przekazaniu -f
flagi.
- Użycie
-f
zapobiega wyświetleniu hasła, jeśli ps
polecenie zostanie wykonane.
- Plik, w którym przechowywane jest hasło, powinien mieć bezpieczne uprawnienia.
ps -aux
, nie powinieneś normalnie uruchamiać poleceń, wpisując swoje hasło, ponieważ inni użytkownicy na tym samym komputerze mogą zobaczyć hasło po uruchomieniups -aux
. jeśli jest to praktyczne, zamiast tego należy również użyć uwierzytelniania za pomocą klucza publicznego, jak wspomniano w drugiej odpowiedzi. pozwala to oddzielić informacje uwierzytelniające od skryptu, abyś mógł bez obaw udostępniać skrypt innym użytkownikom, a następnie zdecydować się na włączenie szyfrowania w folderze ~ / .ssh bez szyfrowania skryptu.sshpass
.Po miesiącach szukania odpowiedzi na pytanie, w końcu znalazłem lepsze rozwiązanie: napisanie prostego skryptu.
Włóż to
/usr/bin/exp
, a następnie możesz użyć:exp <password> ssh <anything>
exp <password> scp <anysrc> <anydst>
Gotowe!
źródło
Użyj uwierzytelniania za pomocą klucza publicznego: https://help.ubuntu.com/community/SSH/OpenSSH/Keys
Na hoście źródłowym uruchom to tylko raz:
To wszystko, po czym będziesz mógł robić ssh bez hasła.
źródło
Możesz użyć skryptu oczekuje. Od jakiegoś czasu nie napisałem żadnego, ale powinien wyglądać jak poniżej. Musisz kierować skryptem
#!/usr/bin/expect
źródło
/bin/myssh.sh: 2: spawn: not found /bin/myssh.sh: 3: expect: not found /bin/myssh.sh: 4: send: not found /bin/myssh.sh: 5: expect: not found /bin/myssh.sh: 6: send: not found
which expect
#!/usr/bin/env expect
interact
do końca, aby sesja ssh była interaktywnaWariant I
Wariant II
źródło
-p
Flaga jest do określania numeru portu.SYNOPSIS sshpass [-ffilename|-dnum|-ppassword|-e] [options] command arguments
yum -y install epel-release
a następnieyum -y install sshpass
sshpass + autossh
Jedną z miłych zalet wspomnianego wyżej
sshpass
jest to, że można go używaćautossh
, eliminując jeszcze więcej interaktywnej nieefektywności.Umożliwi to automatyczne połączenie, jeśli np. Twoje Wi-Fi zostanie przerwane przez zamknięcie laptopa.
źródło
-f
do autossh w tej kombinacji, ponieważwhen used with autossh, ssh will be *unable* to ask for passwords or passphrases.
harding.motd.ca/autossh/README.txt także superuser.com/questions/1278583/…sshpass
z lepszym bezpieczeństwemNatknąłem się na ten wątek, szukając sposobu, aby ssh przełączyć się na zawieszony serwer - przetworzenie próby połączenia SSH zajęło ponad minutę i upłynął limit czasu, zanim mogłem wprowadzić hasło. W takim przypadku chciałem móc podać hasło natychmiast po pojawieniu się monitu.
(A jeśli nie jest to boleśnie jasne: z serwerem w tym stanie jest o wiele za późno, aby skonfigurować login klucza publicznego.)
sshpass
na pomoc. Istnieją jednak lepsze sposoby na rozwiązanie tego problemusshpass -p
.Moja implementacja przechodzi bezpośrednio do interaktywnego monitu o hasło (nie tracę czasu na sprawdzenie, czy może nastąpić wymiana klucza publicznego) i nigdy nie ujawnia hasła jako zwykłego tekstu.
źródło
trap
aby zapobiec wyciekaniu ctrl-C zeSSHPASS
zmiennejPreferredAuthentications=keyboard-interactive
to nie działa, ale zastąpienie go działaniemPreferredAuthentications=password
.W ten sposób loguję się na moje serwery.
#! / bin / bash
sshpass -p mojehasło ssh root @ 1 $
I dlatego...
źródło
odniesienie: https://www.linkedin.com/pulse/youre-doing-wrong-ssh-plain-text-credentials-robert-mccurdy?trk=mp-reader-card
źródło
Chyba nie widziałem, żeby ktokolwiek to sugerował, a OP powiedział po prostu „skrypt”, więc ...
Musiałem rozwiązać ten sam problem, a moim najwygodniejszym językiem jest Python.
Użyłem biblioteki paramiko. Ponadto musiałem wydawać polecenia, dla których potrzebowałbym eskalowanych uprawnień
sudo
. Okazuje się, że sudo może zaakceptować swoje hasło poprzez stdin poprzez flagę „-S”! Patrz poniżej:Mam nadzieję, że to komuś pomoże. Moim przypadkiem użycia było tworzenie katalogów, wysyłanie i rozpakowywanie plików oraz uruchamianie programów na ~ 300 serwerach. Dlatego automatyzacja była najważniejsza. Próbowałem
sshpass
,expect
a potem to wymyśliłem.źródło
Mam to działa w następujący sposób
.ssh / config został zmodyfikowany w celu wyeliminowania monitu o tak / nie - jestem za firewallem, więc nie martwię się o sfałszowane klucze ssh
Utwórz plik odpowiedzi dla expect, tj. Answer.expect
Utwórz skrypt bash i po prostu wywołaj expect w pliku
Pobiera 128 kodów danych hadoop odświeżonych dzięki nowej konfiguracji - przy założeniu, że używasz podłączenia NFS dla plików hadoop / conf
Mam nadzieję, że to komuś pomoże - jestem Windows numpty i zajęło mi to około 5 godzin!
źródło
Jeśli robisz to w systemie Windows, możesz użyć Plink (część PuTTY).
źródło
Mam lepsze rozwiązanie, które obejmuje logowanie do konta niż zmiana na użytkownika root. To jest skrypt bashowy
http://felipeferreira.net/index.php/2011/09/ssh-automatic-login/
źródło
Odpowiedź @abbotto nie działała dla mnie, musiała robić kilka rzeczy inaczej:
źródło
Udało mi się z tym pracować:
źródło
W poniższym przykładzie napiszę rozwiązanie, którego użyłem:
Scenariusz: chcę skopiować plik z serwera za pomocą skryptu sh:
źródło
Użyj tego skryptu w skrypcie, Pierwszy argument to nazwa hosta, a drugi to hasło.
źródło
Aby podłączyć zdalną maszynę za pomocą skryptów powłoki, użyj poniższego polecenia:
gdzie
IPADDRESS
,USERNAME
aPASSWORD
to wartości wejściowe, które muszą dostarczyć w skrypcie, albo jeśli chcemy zapewnić w użyciu wykonawczego „read” polecenie.źródło
StrictHostKeyChecking=no
bez wyjaśnienia konsekwencji.naciśnij klawisz enter, a następnie wprowadź hasło systemowe, a następnie na koniec hasło serwera
źródło