Sessioni SSH non interattive
Se non è necessario disporre di una sessione interattiva sul server remoto, è possibile eseguire sshin un ambiente senza tty, ad esempio nell'ambito di un'azione Esegui script shell in Automator .
Devi creare un programma che quando chiamato stampa la password su standard out, ad esempio il seguente script bash che devi rendere eseguibile usando chmod +x pwd.sh:
#!/usr/bin/env bash
echo "password"
Quindi, imposta la SSH_ASKPASSvariabile di ambiente sul percorso di questo programma, quindi esegui sshl'azione Automator, in questo modo:
export SSH_ASKPASS=/Users/danielbeck/pwd.sh
ssh user@hostname ls
Quando non c'è tty, ma SSH_ASKPASSe DISPLAY(per X11, impostato di default) sono impostati, SSH esegue il programma specificato da SSH_ASKPASSe usa il suo output come password. Questo è inteso per essere utilizzato in ambienti grafici, in modo che possa apparire una finestra che richiede la password. In questo caso, abbiamo semplicemente saltato la finestra, restituendo la password dal nostro programma. Puoi usare invece securityper leggere dal tuo portachiavi, in questo modo:
#!/usr/bin/env bash
security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2
ls(sulla sshriga di comando) è il comando eseguito quando sshè stato effettuato l'accesso e il suo output è stampato in Automator. Naturalmente, puoi reindirizzarlo su un file per registrare l'output del programma che avvii.
Sessioni interattive SSH utilizzando sshpass
Ho scaricato, compilato e installato sshpasse ha funzionato perfettamente. Ecco cosa ho fatto:
- Ottieni gli strumenti per sviluppatori Apple
- Scarica e apri
sshpass-1.05.tar.gz
- Apri una shell nella directory
sshpass-1.05
- Correre
./configure
- Correre
make
- Esegui
make install(potresti averne bisogno sudo)
Ora il programma è installato su /usr/local/bin/sshpass. Eseguire utilizzando una riga come la seguente:
sshpass -pYourPassword ssh username@hostname
Puoi leggere la password securityappena prima di farlo e usarla in questo modo:
SSHPASSWORD=$( security find-generic-password -l password-item-label -g 2>&1 1>/dev/null | cut -d'"' -f2 )
sshpass -p"$SSHPASSWORD" ssh username@hostname
Impacchettalo in una funzione shell e puoi semplicemente digitare ad es. ssh-yourhostnamePer connetterti, farlo recuperare e inserire automaticamente la password.
STDIN is not a terminal. 2) Per le sessioni interattive consshpass, a quanto-ppare l' opzione non fa nulla. Ma correresshpassmentreSSH_ASKPASSè impostato funziona!