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.
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
Lien avec des détails, par exemple des astuces de dépannage,
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
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.