Est-il possible de passer des mots de passe sur un script shell?

11

Cela fait longtemps que je recherche cela, je voudrais savoir s'il est possible de passer des mots de passe dans un script shell? Beaucoup de réponses sont retournées sans réponse. Récemment, j'ai lu un article indiquant comment passer des mots de passe dans un script shell. J'ai essayé cela, mais cela ne semble pas fonctionner. Voici le lien . Quelqu'un peut-il vérifier et revenir en arrière? Veuillez également me dire qu'il existe un moyen de passer des mots de passe dans un script shell? Si aucun pls ne me dit comment linux obtient l'entrée pour le mot de passe?

karthick87
la source

Réponses:

12

Par "saisir des mots de passe", vous entendez probablement saisir des données sans être visible pour l'utilisateur.

(suggéré par geirha) Lorsque vous utilisez bash, vous pouvez utiliser l' -soption pour empêcher l'affichage des caractères saisis:

read -p "Password please: " -s pass

Vous pouvez également modifier le comportement du terminal pour masquer les caractères saisis avec stty -echo(désactiver echo). Après avoir lu le mot de passe avec le shell intégré readdans une variable (dans l'exemple ci-dessous $pass), réactivez-le avec stty echo. Étant donné que la nouvelle ligne de Enterest masquée dans, vous devez imprimer une nouvelle ligne pour obtenir la sortie future sur une nouvelle ligne.

stty -echo
read -p "Password please: " pass
stty echo
printf '\n'

readet printfsont intégrés au shell. sttyest fourni par le coreutilspackage installé par défaut. Cela signifie que cet extrait est très portable.

Remarque: l' -poption n'est pas standard, mais à partir de bash. Si vous devez afficher une invite dans d'autres shells, utilisez:

printf "Password please: "
stty -echo
read pass
stty echo
printf '\n'

Les références:

Lekensteyn
la source
Je veux juste donner le mot de passe root du système distant dans le script. Est-ce possible dans votre cas?
karthick87
@ karthick87: non, ce script capture uniquement les données saisies par l'utilisateur de manière interactive. Si vous souhaitez mettre des mots de passe root dans des scripts, pourquoi ne pas envisager des connexions basées sur des clés?
Lekensteyn
1
La lecture de Bash a également une option pour désactiver l'écho pendant la lecture de la ligne. Tu vois help '\read'.
geirha
Dans zshelle est réalisable à travers read -s 'pw?Prompt text', où pwest une variable où le mot de passe sera placé et -sest un drapeau pour masquer l'entrée.
baldrs
2

À quel programme souhaitez-vous transmettre un mot de passe?

Le script sur le lien fonctionne pour moi. Notez qu'il ne s'agit pas d'un script shell mais d'un script expect (nécessite l' expectinstallation du package`). L'utilisation de expect est un moyen courant d'automatiser des programmes interactifs basés sur du texte.

Les sshconnexions non interactives sont souvent effectuées à l'aide d'une authentification basée sur des clés avec une phrase secrète vide.

Certains autres programmes (comme sudo) ont des options pour lire un mot de passe depuis stdin.

Fournir un mot de passe comme option de ligne de commande est souvent un problème de sécurité car sur la plupart des systèmes, tout utilisateur peut voir les processus des autres utilisateurs, y compris les arguments de ligne de commande à l'aide d'outils simples comme ps.

Florian Diesch
la source
Je veux juste passer un mot de passe au programme ssh.
karthick87
Alors peut-être que l'authentification par clé fonctionne pour vous: utilisez ssh-keygenpour créer une clé d'authentification (appuyez simplement sur Entrée lorsque vous êtes invité à saisir une phrase secrète) et copiez-la vers l'utilisateur distant à l'aide de ssh-copy-id.Si l'authentification par clé est activée pour sshd (c'est par défaut) ssh sera alors pas vous demander un mot de passe.
Florian Diesch
1

Un script ne devrait jamais vraiment gérer les mots de passe. Demandez à l'application qui a besoin du mot de passe de le demander lui-même, ou si ce n'est pas possible, trouvez un meilleur moyen d'authentification avec l'application. Veuillez lire http://mywiki.wooledge.org/BashFAQ/069

geirha
la source
0

Il existe un moyen de stocker les mots de passe dans un script bash mais vous devez crypter le script afin que personne ne puisse le lire ou exécuter n'importe quel type de débogueur dessus pour voir exactement ce qu'il fait. Pour crypter un script bash / shell et qu'il soit réellement exécutable, essayez de le copier et de le coller ici

Sur la page ci-dessus, tout ce que vous avez à faire est de soumettre votre script (vous pouvez d'abord soumettre un exemple de script pour votre tranquillité d'esprit). Un fichier zip sera généré pour vous. Faites un clic droit sur le lien de téléchargement et copiez l'URL qui vous est fournie. Ensuite, accédez à votre boîte UNIX et effectuez les étapes suivantes.

Installation:

   wget link-to-the-zip-file
   unzip the-newly-downloaded-zip-file
   cd /tmp/KingLazySHIELD
   ./install.sh  /var/tmp/KINGLAZY/SHIELDX-(your-script-name) /home/(your-username)  -force 

Ce que la commande d'installation ci-dessus fera pour vous:

  1. Il installera le script crypté dans le répertoire /var/tmp/KINGLAZY/SHIELDX-(your-script-name).

  2. Il placera un lien vers ce script crypté dans le répertoire que vous spécifiez en remplacement de /home/(your-username)- de cette façon, il vous permet d'accéder facilement au script sans avoir à taper le chemin absolu.

  3. Garantit que PERSONNE ne peut modifier le script - Toute tentative de modification du script crypté le rendra inutilisable ... jusqu'à ce que ces tentatives soient arrêtées ou supprimées.

  4. Garantit que personne ne peut en faire de copie. Personne ne peut copier votre script dans un endroit isolé et essayer de le contourner pour voir comment cela fonctionne. Toutes les copies du script doivent être des liens vers l'emplacement d'origine que vous avez spécifié lors de l'installation.

REMARQUE:

Je ne pense pas que cela fonctionne pour les scripts interactifs qui invitent l'utilisateur à répondre. Les valeurs doivent être codées en dur dans le script. Le chiffrement garantit que personne ne peut réellement voir ces valeurs, vous n'avez donc pas à vous en soucier.

SimplifiedWorkings
la source
-1

vous pouvez simplement faire quelque chose comme ça.

# echo -e "password_here\npassword_here" | su user

la source

fromnaboo
la source