Nieinteraktywne sesje SSH
Jeśli nie potrzebujesz interaktywnej sesji na zdalnym serwerze, możesz wykonać ją ssh
w środowisku bez tty
, np. W ramach akcji Uruchom skrypt powłoki w Automatorze .
Musisz stworzyć program, który po wywołaniu wypisuje hasło na standardowe wyjście, np. Następujący skrypt bash, który musisz wykonać chmod +x pwd.sh
:
#!/usr/bin/env bash
echo "password"
Następnie ustaw SSH_ASKPASS
zmienną środowiskową na ścieżkę do tego programu, a następnie uruchom ssh
akcję Automator w następujący sposób:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Gdy nie ma tty
, ale SSH_ASKPASS
i DISPLAY
(dla X11, ustawione domyślnie), SSH wykonuje program określony przez SSH_ASKPASS
i używa jego danych wyjściowych jako hasła. Jest to przeznaczone do użycia w środowiskach graficznych, dzięki czemu można wyświetlić okno z prośbą o podanie hasła. W tym przypadku po prostu pominęliśmy okno, zwracając hasło z naszego programu. Zamiast tego możesz użyć security
do odczytu z pęku kluczy:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls
(w ssh
wierszu poleceń) to polecenie wykonywane po ssh
zalogowaniu, a jego dane wyjściowe są drukowane w programie Automator. Możesz oczywiście przekierować go do pliku, aby zapisać dane wyjściowe uruchamianego programu.
Interaktywne sesje SSH przy użyciu sshpass
Pobrałem, skompilowałem i zainstalowałem sshpass
i działało idealnie. Oto co zrobiłem:
- Uzyskaj narzędzia programistyczne Apple
- Pobierz i otwórz
sshpass-1.05.tar.gz
- Otwórz powłokę do katalogu
sshpass-1.05
- Biegać
./configure
- Biegać
make
- Uruchom
make install
(możesz tego potrzebować sudo
)
Teraz program jest zainstalowany /usr/local/bin/sshpass
. Wykonaj używając linii takiej jak poniżej:
sshpass -pYourPassword ssh username@hostname
Możesz przeczytać hasło security
tuż przed zrobieniem tego i użyć go w następujący sposób:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Zawiń to w funkcję powłoki i możesz po prostu wpisać np., ssh-yourhostname
Aby się połączyć, automatycznie pobierając i wprowadzając hasło.
STDIN is not a terminal
. 2) W przypadku interaktywnych sesji zsshpass
The-p
opcja widocznie nie robić nic. Ale uruchamianie,sshpass
gdySSH_ASKPASS
jest ustawiony, działa!STDIN is not a terminal
błąd. Tym razem jednak nie otrzymałem żadnego hasła; Wierzę, żeSSH_ASKPASS
działa w Automatorze, ponieważ jeśli zrobię wSSH_ASKPASS
zamian niepoprawne hasło, otrzymamPermission denied, please try again.
błąd.macOs >= 10.13
Znalazłem rozwiązanie (dzięki Danielowi Beck za dostarczenie kluczowych informacji potrzebnych do tego). Pamiętaj, że testowałem to tylko z systemem OS X Lion 10.7.2. Jeśli to nie zadziała, wypróbuj rozwiązanie Daniela.
Najpierw musimy ustawić
SSH_ASKPASS
zmienną środowiskową - jej wartością powinna być ścieżka do programu, który wypisuje hasło na standardowe wyjście. Aby uzyskać hasło z pęku kluczy, musi wyglądać tak (nazywam toget-ssh-password.sh
):Kilka punktów do zapamiętania:
Zakłada się, że hasło zostało zapisane w pęku kluczy w sposób opisany w pytaniu
Podany program
SSH_ASKPASS
zostanie wywołany bez żadnych argumentów; dlatego używamy zmiennych środowiskowych do przekazania nazwy użytkownika i hosta.Teraz możemy ustawić
SSH_PASSWORD_USER
iSSH_PASSWORD_HOSTNAME
uruchomić,sshpass
aby zalogować się do naszego serwera.Stworzyłem inny skrypt
ssh-kcpass
, aby to zrobić:Aby zalogować się do serwera ssh bez wpisywania hasła, wystarczy uruchomić
ssh-kcpass user@hostname
.źródło
macOS >= 10.13
Cześć, ludzie. Natknąłem się na ten temat, szukając czegoś innego, ale ... Nie wiem, czy coś mi tu brakuje ... ale twoje podejście wydaje mi się dziwne. dlaczego nie użyć uwierzytelnienia klucza publicznego ... Wygeneruj klucz rsa $ ssh-keygen -t rsa -b 2048 -C 'email / id'
Najlepiej byłoby użyć raz ssh-copy-id użytkownik @ host i raz uwierzytelnić się przy użyciu hasła, aby zainstalować klucz na innym serwerze, lub użyć dowolnego narzędzia skryptowego lub narzędzia do autoryzacji, aby wdrożyć klucz do ~ / .ssh / Author_keys na drugi host (dla użytkownika, do którego chcesz się zalogować) Jeśli zrobisz to ręcznie, musisz odpowiednio edytować / etc / ssh / sshd_config i zautomatyzować (szef kuchni, ansible), byś wcisnął pełną condiga do pożądanego stanu.
Kluczem, który ma znaczenie przy dystrybucji, jest id_rsa.pub, zachowaj bezpieczeństwo klucza prywatnego
Aby użyć pęku kluczy do uwierzytelnienia hostów w automatycznej, prostej edycji na komputerze ~ / .ssh / config i dodaj:
Host * Użyj klucza kluczy tak
Poszukaj więcej informacji na temat opcji pliku konfiguracyjnego ssh, mając nadzieję, że coś z tego się przyda
źródło