Nieinteraktywne sesje SSH
Jeśli nie potrzebujesz interaktywnej sesji na zdalnym serwerze, możesz wykonać ją sshw ś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_ASKPASSzmienną środowiskową na ścieżkę do tego programu, a następnie uruchom sshakcję Automator w następujący sposób:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Gdy nie ma tty, ale SSH_ASKPASSi DISPLAY(dla X11, ustawione domyślnie), SSH wykonuje program określony przez SSH_ASKPASSi 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ć securitydo 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 sshwierszu poleceń) to polecenie wykonywane po sshzalogowaniu, 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 sshpassi 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 securitytuż 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-yourhostnameAby się połączyć, automatycznie pobierając i wprowadzając hasło.
STDIN is not a terminal. 2) W przypadku interaktywnych sesji zsshpassThe-popcja widocznie nie robić nic. Ale uruchamianie,sshpassgdySSH_ASKPASSjest ustawiony, działa!