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!