Dans mon script Shell, j'exécute une commande qui me demande une entrée.
Comment puis-je donner à la commande l'entrée dont elle a besoin automatiquement?
Par exemple:
$cat test.sh
ssh-copy-id [email protected]
Lors de l'exécution de test.sh:
Tout d'abord, il demandera:
Are you sure you want to continue connecting (yes/no)?
Ensuite, il me demandera de saisir le mot de passe:
[email protected]'s password:
Existe-t-il un moyen de saisir cela automatiquement?
Pour l'automatisation générale de la ligne de commande, Expect est l'outil classique. Ou essayez pexpect si vous êtes plus à l'aise avec Python.
Voici une question similaire qui suggère d'utiliser Expect: tilisez expect dans le script bash pour fournir le mot de passe à la commande SSH
Pour une saisie simple, comme deux invites et deux réponses fixes correspondantes, vous pouvez également utiliser un "document ici", dont la syntaxe ressemble à ceci:
test.sh <<!
y
pasword
!
Le << préfixe un motif, dans ce cas '!'. Tout jusqu'à une ligne commençant par ce modèle est interprété comme une entrée standard. Cette approche est similaire à la suggestion de canaliser un écho multi-lignes dans ssh, sauf qu'elle enregistre le fork/exec de la commande echo et je le trouve un peu plus lisible. L'autre avantage est qu'il utilise la fonctionnalité intégrée de Shell de sorte qu'il ne dépend pas de l'attente.
Il y a définitivement ... Utilisez les commandes spawn, expect et send:
spawn test.sh
expect "Are you sure you want to continue connecting (yes/no)?"
send "yes"
Il y a plus d'exemples partout dans Stack Overflow, voir: Aide avec Expect dans un script bash
Vous devrez peut-être d'abord installer ces commandes, selon votre système.
clé ssh avec phrase secrète, avec trousseau
trousseau est un petit utilitaire qui gère ssh-agent en votre nom et permet à ssh-agent de continuer à fonctionner à la fin de la session de connexion. Lors des connexions suivantes, le trousseau se connectera à l'instance ssh-agent existante. En pratique, cela signifie que la phrase secrète doit être entrée uniquement lors de la première connexion après un redémarrage. Lors des connexions suivantes, la clé non chiffrée de l'instance ssh-agent existante est utilisée. Cela peut également être utile pour permettre l'authentification RSA/DSA sans mot de passe dans les tâches cron sans clé ssh sans mot de passe.
Pour activer le trousseau, installez-le et ajoutez quelque chose comme le suivant à ~/.bash_profile:
eval keychain --agents ssh --eval id_rsa
Du point de vue de la sécurité, ssh-ident et trousseau sont pires que les instances de ssh-agent limitées à la durée de vie d'une session particulière, mais ils offrent un haut niveau de commodité. Pour améliorer la sécurité du trousseau, certaines personnes ajoutent l'option --clear à leur appel de trousseau ~/.bash_profile. En faisant cela, les phrases secrètes doivent être saisies à nouveau lors de la connexion comme ci-dessus, mais les tâches cron auront toujours accès aux clés non chiffrées après la déconnexion de l'utilisateur. La page wiki du trousseau contient plus d'informations et d'exemples.
J'ai obtenu cette information de;
J'espère que cela t'aides
J'ai personnellement pu saisir automatiquement ma phrase secrète lors du lancement du terminal en procédant ainsi: (vous pouvez bien sûr modifier le script et l'adapter à vos besoins)
éditez le fichier bashrc pour ajouter ce script;
if [-z "$ SSH_AUTH_SOCK"]; puis exec ssh-agent bash -c "ssh-add; $ 0" echo "L'agent SSH a été réveillé" exit fi
./ssh.exp
voici le contenu de ce script d'attente
#!/usr/bin/expect
set timeout 20
set passphrase "test"
spawn "./keyadding.sh"
expect "Enter passphrase for /the/path/of/yourkey_id_rsa:"
send "$passphrase\r";
interact
Voici le contenu de mon script keyadding.sh (vous devez mettre les deux scripts dans votre dossier personnel, généralement/home/user)
#!/bin/bash
ssh-add /the/path/of/yourkey_id_rsa
exit 0
Je suggérerais FORTEMENT de crypter le mot de passe sur le script .exp ainsi que de renommer ce fichier .exp en quelque chose comme term_boot.exp ou autre chose pour des raisons de sécurité. N'oubliez pas de créer les fichiers directement depuis le terminal en utilisant nano ou vim (ex: nano ~/.bashrc | nano term_boot.exp
) et aussi un chmod +x script.sh
pour le rendre exécutable. UNE chmod +r term_boot.exp
serait également utile mais vous devrez ajouter Sudo avant ./ssh.exp dans votre fichier bashrc. Vous devrez donc saisir votre mot de passe Sudo à chaque lancement de votre terminal. Pour moi, c'est plus pratique que la phrase secrète car je me souviens de mon mot de passe administrateur (Sudo) près du foyer.
En outre, voici une autre façon de le faire, je pense; https://www.cyberciti.biz/faq/noninteractive-Shell-script-ssh-password-provider/
Va certainement changer ma méthode pour celui-ci quand j'aurai le temps.
Vous pouvez également diriger les réponses vers le script:
printf "y\npassword\n" | sh test.sh
où \n
est une séquence d'échappement