Domanda

Sto scrivendo un programma C Shell che eseguirà su o sudo o ssh . Vogliono tutti le loro password nell'input della console (il TTY) anziché in stdin o nella riga di comando.

Qualcuno conosce una soluzione?

L'impostazione di sudo senza password non è un'opzione.

potrebbero essere un'opzione, ma è non presente sul mio sistema ridotto.

È stato utile?

Soluzione

Per sudo esiste un'opzione -S per accettare la password dall'input standard. Ecco la voce man:

    -S          The -S (stdin) option causes sudo to read the password from
                the standard input instead of the terminal device.

Questo ti permetterà di eseguire un comando come:

echo myPassword | sudo -S ls /tmp

Per quanto riguarda ssh, ho fatto molti tentativi di automatizzare / scriptare il suo utilizzo senza successo. Non sembra esserci alcun modo incorporato per passare la password al comando senza chiedere conferma. Come altri hanno già detto, il " prevedono " l'utilità sembra mirare a risolvere questo dilemma, ma alla fine, impostare la corretta autorizzazione della chiave privata è la strada da percorrere quando si tenta di automatizzare questo.

Altri suggerimenti

Ho scritto qualche applescript che richiede una password tramite una finestra di dialogo e quindi crea un comando bash personalizzato, come questo:

echo <password> | sudo -S <command>

Non sono sicuro che questo aiuti.

Sarebbe bello se sudo accettasse una password pre-crittografata, quindi potrei crittografarla all'interno del mio script e non preoccuparmi di riecheggiare password di testo chiaro in giro. Tuttavia, questo funziona per me e la mia situazione.

Per ssh puoi usare sshpass : sshpass -p yourpassphrase ssh user @ host .

Devi solo scaricare prima sshpass :)

$ apt-get install sshpass
$ sshpass -p 'password' ssh username@server

Ho:

ssh user@host bash -c "echo mypass | sudo -S mycommand"

Funziona per me.

Questo può essere fatto impostando le chiavi pubbliche / private sugli host di destinazione a cui ci si connetterà. Il primo passo sarebbe generare una chiave ssh per l'utente che esegue lo script sull'host locale, eseguendo:

ssh-keygen
Enter file in which to save the key (/home/myuser/.ssh/id_rsa): <Hit enter for default>
Overwrite (y/n)? y

Quindi inserire una password vuota. Successivamente, copia la tua chiave ssh sull'host di destinazione a cui ti collegherai.

ssh-copy-id <remote_user>@<other_host>
remote_user@other_host's password: <Enter remote user's password here>

Dopo aver registrato le chiavi ssh, sarai in grado di eseguire un ssh remote_user @ altro_host silenzioso dal tuo host locale.

La solita soluzione a questo problema è impostare un'app helper che esegue l'attività che richiede l'accesso da superutente: http://en.wikipedia.org/wiki/Setuid

Sudo non è pensato per essere usato offline.

Modifica successiva: SSH può essere utilizzato con l'autenticazione con chiave pubblica-privata. Se la chiave privata non ha una passphrase, è possibile utilizzare ssh senza richiedere una password.

Per sudo puoi fare anche questo:

sudo -S <<< "password" command

Quando non c'è scelta migliore (come suggerito da altri), allora man socat può aiutare:

   (sleep 5; echo PASSWORD; sleep 5; echo ls; sleep 1) |
   socat - EXEC:'ssh -l user server',pty,setsid,ctty

          EXEC’utes an ssh session to server. Uses a pty for communication
          between socat and ssh, makes it ssh’s  controlling  tty  (ctty),
          and makes this pty the owner of a new process group (setsid), so
          ssh accepts the password from socat.

È necessaria tutta la complessità pty, setsid, ctty e, mentre potresti non aver bisogno di dormire più a lungo, dovrai dormire. Anche l'opzione echo = 0 vale la pena dare un'occhiata, così come passa il comando remoto sulla riga di comando di ssh.

Forse puoi usare un comando prevedono ?:

expect -c 'spawn ssh root@your-domain.com;expect password;send "your-password\n";interact

Questo comando fornisce automaticamente la password.

Dai un'occhiata all'utilità linux prevede .

Ti consente di inviare l'output a stdio in base alla semplice corrispondenza del modello su stdin.

Imposta SSH per l'autenticazione con chiave pubblica, senza passphrase sulla chiave. Carichi di guide in rete. Allora non avrai bisogno di una password per accedere. È quindi possibile limitare le connessioni per una chiave in base al nome host del client. Fornisce una sicurezza ragionevole ed è ottimo per accessi automatizzati.

ssh -t -t me@myserver.io << EOF
echo SOMEPASSWORD | sudo -S do something
sudo do something else
exit
EOF

Ho avuto lo stesso problema. script di dialogo per creare directory sul pc remoto. il dialogo con ssh è facile. Uso sshpass (precedentemente installato).

   dialog --inputbox "Enter IP" 8 78 2> /tmp/ip

   IP=$(cat /tmp/ip)


   dialog --inputbox "Please enter username" 8 78 2> /tmp/user

   US=$(cat /tmp/user)


   dialog --passwordbox "enter password for \"$US\" 8 78 2> /tmp/pass

   PASSWORD = $(cat /tmp/pass)


   sshpass -p "$PASSWORD" ssh $US@$IP mkdir -p /home/$US/TARGET-FOLDER


   rm /tmp/ip

   rm /tmp/user

   rm /tmp/pass

saluti dalla Germania

Titus

USO:

echo password | sudo command

Esempio:

echo password | sudo apt-get update; whoami

Spero che aiuti ..

Basandomi sulla risposta di @ Jahid, questo ha funzionato per me su macOS 10.13:

ssh <remote_username>@<remote_server> sudo -S <<< <remote_password> cat /etc/sudoers

Puoi fornire la password come parametro per prevedere lo script.

echo <password> | su -c <command> <user> 

Funziona.

L'hardcoding di una password in uno script prevede è lo stesso di avere un sudo senza password, in realtà peggio, dato che sudo registra almeno i suoi comandi.

Un modo sarebbe usare l'opzione read -s .. in questo modo i caratteri della password non vengono ripetuti sullo schermo. Ho scritto un piccolo script per alcuni casi d'uso e puoi vederlo nel mio blog: http://www.datauniv.com/ blog / 2013/02/21 / un-quick-po-aspettarsi-script /

su -c "Command" < "Password"

Spero che sia utile.

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