web-dev-qa-db-fra.com

Comment puis-je éviter de devoir entrer un mot de passe pour une commande scp en codant en dur le mot de passe dans mon script?

J'ai créé un script bash qui nécessite parfois que je saisisse certaines informations (autre mot de passe/nom d'utilisateur) lorsque je l'exécute.

Y a-t-il un moyen d'éviter cela en entrant (codage en dur) cette information dans le code? De cette façon, lorsque je l'exécuterai, tout se déroulera sans heurts sans me demander quoi que ce soit.

C'est la commande:

scp /home/machine1/backup/test.txt /home/machine2/backup

Au lieu de taper le mot de passe machine2, je souhaite le coder en dur dans mon script.

5
Taieb

L'authentification par clé SSH est pratique et sécurisée

Veuillez ne pas coder en dur un mot de passe dans le shellscript, car il est facile pour d'autres personnes de le lire.

  • Connectez-vous avec authentification par clé à ssh est ce dont vous avez besoin.

    De cette façon, vous n'avez pas besoin de mot de passe, et il est également plus sécurisé. Ceci est particulièrement important si l'ordinateur est visible sur Internet. Si vous ne le jugez pas important, essayez de consigner les tentatives de connexion que vous obtiendrez la semaine suivante.

    • Fonctionnement

      ssh-keygen
      

      il vous sera probablement proposé de protéger la clé avec une phrase secrète .

    • Ne le faites pas (appuyez sur Entrée pour continuer sans phrase secrète lorsque ssh-keygen vous le demande), car vous ne souhaitez pas taper de mot de passe ou de phrase secrète lorsque vous exécutez le script et accédez à la ligne de commande scp.

      Sans authentification par clé et avec des mots de passe en texte clair, il est très important de disposer d'autorisations strictes sur le shellscript. C'est également une bonne idée pour les scripts de sécurité liés à la sécurité sans phrase secrète. Les autorisations par défaut pour un fichier de script (lorsqu'il est créé quelque part dans votre répertoire personnel) sont probablement 644

      $ ls -l shellscript 
      -rw-r--r-- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      et vous pouvez donner à vos fichiers de script des autorisations d'exécution pour tout le monde, 755

      $ chmod 755 shellscript
      $ ls -l shellscript 
      -rwxr-xr-x 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      mais vous feriez mieux de le réduire à 600, sans autorisation, sauf pour votre propre ID utilisateur, et sans autorisation d'exécution du tout.

      $ chmod 600 shellscript 
      $ ls -l shellscript
      -rw------- 1 sudodus sudodus 349 dec 23 10:54 shellscript
      

      et vous ne pouvez pas l'exécuter directement avec ./shellscript, utilisez donc

      bash shellscript       # when shellscript in the current directory
      bash path-to-shellscript/shellscript  # from other directories
      
    • Faites-le (saisissez une phrase secrète lorsque ssh-keygen vous le demandera) si vous souhaitez renforcer la sécurité, car votre clé privée sera protégée (cryptée avec la phrase secrète), mais ensuite vous devez taper la phrase secrète lorsque vous exécutez le script avec scp.

    • Vous devez copier un fichier de clé, par exemple avec

      ssh-copy-id <username>@<Host>
      
    • scp utilise ssh pour le transfert de données. Ainsi, lorsque les clés sont en place, cela devrait fonctionner sans mot de passe.


  • Chaque machine linux peut être transformée en serveur ssh en installant openssh-server, dans Ubuntu avec apt,

    Sudo apt update
    Sudo apt install openssh-server
    

13
sudodus

Configurez un accès ssh sur votre serveur avec une paire de clés publique/privée rsa. Gardez votre clé privée chargée en mémoire. Ensuite, vous pouvez entrer scp ou ssh sur le serveur sans mot de passe (en plus de vous simplifier la vie, l'authentification par fichier de clé est nettement plus sécurisée que celle par mot de passe).

Voici comment configurer ssh pour l'authentification de fichier clé: https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2

1
Eric Mintz

Utilisez sshpass. Dans Ubuntu, vous pouvez l'installer avec Sudo apt install sshpass.

Cette syntaxe générale devrait faire l'affaire:

sshpass -p<password> <source> <destination>

Mais ce n'est pas sécurisé. Ne mettons pas la commodité trop loin avant la sécurité de base. Tout autre utilisateur du système peut voir les commandes et les arguments exécutés par d'autres utilisateurs. Pour vous protéger contre cela, vous pouvez avoir sshpass lu à partir d'une variable d'environnement.

export SSHPASS=<password>
sshpass -e scp <source> <destination>

Je recommanderais également d'exécuter unset SSHPASS si quelque chose d'autre dans votre script n'est pas fiable.

0
matalak