Se non si desidera realmente utilizzare una coppia di chiavi pubblica / privata, è possibile scrivere uno expect
script per inserire automaticamente la password in base all'indirizzo di destinazione.
Modifica: voglio dire che puoi avere uno script che, da un lato, utilizza expect
per inserire la password per te e, dall'altro, legge la password per un determinato utente e host da un file di configurazione. Ad esempio, il seguente script python funzionerà per lo scenario di una giornata di sole:
#!/usr/bin/python
import argparse
from ConfigParser import ConfigParser
import pexpect
def main(args):
url = args.url
user, host = url.split('@', 1)
cfg_file = 'ssh.cfg'
cfg = ConfigParser()
cfg.read(cfg_file)
passwd = cfg.get(user, host)
child = pexpect.spawn('ssh {0}'.format(url))
child.expect('password:')
child.sendline(passwd)
child.interact()
if __name__ == '__main__':
parser = argparse.ArgumentParser(description='Run ssh through pexpect')
parser.add_argument('url')
args = parser.parse_args()
main(args)
e il formato del file di configurazione sarebbe il seguente:
[user_1]
host1 = passwd_1
host2 = passwd_2
[user_2]
host1 = passwd_1
host2 = passwd_2
Nota: Come spiegato, lo script python dovrebbe essere molto più complesso per gestire tutti i possibili errori e messaggi di domande da ssh e tutti i possibili URL (nell'esempio si presume che sarà qualcosa di simile user@host
, ma la parte utente non è ' ho usato la maggior parte delle volte), ma l'idea di base sarebbe sempre la stessa. Per quanto riguarda il file di configurazione, è possibile utilizzare un file di configurazione diverso o utilizzare .ssh/config
e scrivere il proprio codice per analizzare quel file e ottenere la password per un determinato utente e host.