Je souhaite créer scp
un fichier sur un hôte distant, puis exécuter une commande sur le fichier et quitter la session distante. Si j'écris un script habituel, appelez scp
puis ssh
, je suis invité à entrer deux mots de passe. Existe-t-il un moyen de copier, ssh
et d’exécuter une commande sur un ordinateur distant avec un seul mot de passe?
Aussi, comment écrire des scripts qui doivent interagir avec l'utilisateur pour entrer des mots de passe?
Je ne veux pas utiliser "read" car ce n'est pas sûr. Je ne veux pas utiliser sans mot de passe ssh
car mon fichier de clé privée peut être compromis, ce qui est encore pire. J'ai lu quelque chose à propos de "s'attendre" mais je ne suis pas sûr que ce soit le bon outil.
except
stocke également votre mot de passe en mémoire dans la mémoire, il est donc aussi mauvais queread
. Oh, pas si mal. Comme ilread
s'agit d'un shell intégré, la variable peut être conservée plus longtemps dans la mémoire si vous ne la désactivez pas.Réponses:
Non, c'est faux. Un fichier de clé privée offre plus de sécurité qu'un mot de passe. Utilisez un fichier de clé privée. Le fichier de clé privée est crypté avec un mot de passe; si quelqu'un récupère le fichier de clé, il a toujours besoin de votre mot de passe. Si vous utilisiez l'authentification par mot de passe, toute personne cherchant le mot de passe serait libre de chez elle.
Courez
ssh-agent
pendant la durée de votre session. Avant d'utiliser une clé particulière, entrez le mot de passe avecssh-add
(ou via une invite de l'interface graphique). Ensuite, il n'y aura pas d'invite lorsque vous vous connecterez à l'aide de cette clé.la source
Il y a deux façons de varier, en termes de commodité et de compromis.
L'une consiste à transférer le fichier en ligne. Avez-vous besoin d'une entrée autre que le contenu du fichier? Si non,
ssh example.com 'cat > the_file ; process the_file' < the_file
fera ce que vous voulez.L'autre consiste à faire quelque chose qui réutilise la connexion SSH.
ControlMaster
et friends for ssh peuvent aider - voirssh_config(1)
pour plus de détails, ou il existe différents wrappers, ou implémentations de SSH pour différents langages de programmation utiles.Lisez-le à partir de l'ATS. Généralement, la meilleure stratégie consiste à permettre à ssh d’interagir directement avec l’utilisateur sans se gêner, car il dispose d’une implémentation beaucoup mieux testée et validée de cette manière.
Pour interagir avec l'utilisateur, je présume. En fait, il n’est pas très différent de laisser SSH poser la question de la sécurité, mais c’est l’idéal pour rester à l’écart.
... et je présume que l'agent SSH n'est pas acceptable non plus pour la même raison.
la source
Utiliser 's'attendre' pour ce que vous demandez est possible et certaines personnes l'utilisent encore. Un script d'attente peut "intercepter" la sortie des commandes et vous pouvez "répondre" en fonction de leur sortie. Votre script ressemblera à:
Bien sûr, cela fonctionnerait, mais cela poserait un autre problème. Votre mot de passe sera enregistré sous forme de texte brut et toute personne lisant ce fichier pourra voir votre mot de passe.
Mon opinion personnelle est que le moyen non interactif le plus sûr est l'authentification par clé privée.
la source
Vous pouvez utiliser des
ssh
clés, mais les attribuer à un utilisateur personnalisé du système distant dont le shell est défini non pas à un shell réel, mais à une commande à exécuter. Lors de la connexion, la commande est exécutée et le terminal se ferme. Ainsi, si le mot de passe est compromis, ils ne peuvent pas entrer de commande de manière interactive, mais uniquement exécuter le jeu de commandes défini en tant que shell.la source