Domanda

C'è un modo per passare automaticamente una password a ssh. Vorrei inviare automaticamente ssh a un server senza utilizzando l'autenticazione con chiave pubblica o aspettando gli script, facendo in modo che ssh legga la password da stdin o da un file.

La ragione per cui deve essere così è che vorrei fare il backup dei miei file su un server usando rsync / ssh in esecuzione come cron job. Questo server monta la mia home directory dopo mi autentica, quindi l'uso dell'autenticazione con chiave pubblica non funziona poiché ~ / .ssh non è disponibile fino a quando il login non riesce. prevedono (1) è fuori discussione perché vorrei eseguirlo come cron job, e poiché i cron job non vengono eseguiti in un terminale la combinazione di prevedono / ssh non funziona. Non ho accesso root a quel server e sarebbe difficile convincere gli amministratori ad apportare modifiche al modo in cui le cose funzionano lì.

È stato utile?

Soluzione

Usa sshpass .

Ad esempio, quando la password è nel file password.txt :

sshpass -fpassword.txt ssh username@hostname

(tratto dalla risposta a una domanda simile )

Altri suggerimenti

  

aspetto è fuori discussione perché vorrei eseguirlo come cron job,   e poiché i lavori cron non vengono eseguiti sotto un terminale, la combinazione di prevedono / ssh   semplicemente non funziona

Puoi eseguire gli script di attesa da cron, almeno puoi con librerie di attesa come " pexpect " per Python. Ho appena provato questo per confermare, eseguendo uno script pexpect scp / ssh da cron e sono stato in grado di scappare con successo un file da uno script Python in esecuzione in cron.

Codice di esempio:

#!/usr/bin/python

import pexpect

FILE="/path/to/file"
REMOTE_FILE=""
USER="user"
HOST="example.com"
PASS="mypass"
COMMAND="scp -oPubKeyAuthentication=no %s %s@%s:%s" % (FILE, USER, HOST, REMOTE_FILE)

child = pexpect.spawn(COMMAND)
child.expect('password:')
child.sendline(PASS)
child.expect(pexpect.EOF)
print child.before

Anziché passare la password, utilizzare un sistema di chiave pubblica / privata. Aggiungi la chiave pubblica per una macchina all'elenco delle chiavi autorizzate su tutte le macchine a cui vuoi connetterti. Utilizzando questo metodo SSH può validare automaticamente le chiavi e non è richiesta alcuna password.

Puoi trovare le istruzioni qui: http://linuxproblem.org/art_9.html

Dato che ho appena letto la domanda più attentamente, potresti voler cercare un client SSH diverso che supporti l'autenticazione con password senza l'interazione dell'utente. Ho fatto una rapida ricerca su Google suggerendo che esistono ( http: / /www.derkeiler.com/Newsgroups/comp.security.ssh/2004-12/0134.html )

Domande correlate su StackOverflow:

Questa discussione parla di ciò che stai cercando di fare:

http://cygwin.com/ml/cygwin/2004-02 /msg01449.html

Se non puoi fare in modo che l'amministratore crei una directory locale per te, allora non funzionerà.

SSH richiede un "salto di fede" per garantire la stretta di mano iniziale contro manomissioni future. (Inizialmente ti fidi della chiave fornita dal server)

Un approccio attualmente disponibile ma non molto noto è l'uso di SSH-SRP. Ciò utilizza la conoscenza reciproca delle password per autenticare l'utente e fornire le chiavi di crittografia della sessione necessarie per crittografare in modo sicuro la sessione ssh.

È MOLTO più sicuro dell'iniziale "SSH fidati di me" di SSH; e non richiede l'archiviazione a lungo termine delle chiavi.

Non utilizzare prevede, pexpect o simili per inserire una password. Se lo fai, la tua password deve essere da qualche parte in testo normale, che in realtà può essere meno sicuro rispetto all'utilizzo di una coppia di chiavi pubblica / privata senza password. Ed è più lavoro!

Leggi questa pagina da " SSH: la guida definitiva " per una discussione delle tue opzioni: http://www.snailbook.com/faq/no-passphrase.auto. html

Hai capito male come funziona l'autenticazione con chiave pubblica. Non è necessario accedere alla directory principale remota, è sufficiente inserire la chiave pubblica locale nel file authorized_keys remoto. Avere un google in giro, ci sono molte guide.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top