web-dev-qa-db-fra.com

Fournissez le mot de passe à la commande ssh à l'intérieur du script bash, sans l'utilisation de clés publiques et attendez

Je veux utiliser SSH dans un script, mais ce script ne va pas être exécuté sur ma machine.

Dans mon implémentation, il y a deux limitations.

  • Je ne peux pas travailler en dehors des standards de Shell, donc je ne peux pas utiliser expect car je ne sais pas s'il sera disponible sur cette machine.
  • Je ne peux pas m'attendre à ce que cette machine ait public keys pour le SSH.

Quelles sont les options-solutions possibles?

Comment puis-je fournir à ssh le mot de passe demandé de manière automatisée et sécurisée sans ajouter de dépendances supplémentaires?

Sera-t-il possible de fournir le mot de passe à l'intérieur du script?

Merci d'avance à tous :)

19
stratis

Tout d'abord: Ne mettez pas de secrets en texte clair sauf vous savez pourquoi c'est une chose sûre à faire (c'est-à-dire que vous avez évalué quels dégâts peuvent être causés par un attaquant connaissant le secret).

Si vous êtes d'accord pour mettre des secrets dans votre script, vous pouvez expédier une clé ssh avec elle et l'exécuter dans un ssh-agent Coquille:

#!/usr/bin/env ssh-agent /usr/bin/env bash
KEYFILE=`mktemp`
cat << EOF > ${KEYFILE}
-----BEGIN RSA PRIVATE KEY-----
[.......]
EOF
ssh-add ${KEYFILE}

# do your ssh things here...

# Remove the key file.
rm -f ${KEYFILE}

Un avantage de l'utilisation des clés ssh est que vous pouvez facilement utiliser commandes forcées pour limiter ce que le détenteur de clé peut faire sur le serveur.

Une approche plus sûre serait de laisser le script s'exécuter ssh-keygen -f ~/.ssh/my-script-key pour créer une clé privée spécifique à cet effet, mais vous aurez également besoin d'une routine pour ajouter la clé publique au serveur.

11
Anders Lindahl

Installez sshpass, puis lancez la commande:

sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no yourusername@hostname
29
gino pilotino

Pour des raisons de sécurité, vous devez éviter de fournir un mot de passe sur une ligne de commande, sinon toute personne exécutant la commande ps peut voir votre mot de passe. Mieux vaut utiliser sshpass utilitaire comme ceci:

#!/bin/bash

export SSHPASS="your-password"
sshpass -e ssh -oBatchMode=no sshUser@remoteHost

Vous pourriez être intéressé par Comment exécuter la commande sftp avec un mot de passe à partir du script Bash?

17
anubhava

AFAIK il n'y a aucune possibilité à côté d'utiliser des clés ou attendez-vous si vous utilisez la version de ligne de commande ssh. Mais il existe des liaisons de bibliothèque pour la plupart des langages de programmation comme C, python, php, .... Vous pourriez écrire un programme dans une telle langue. De cette façon, il serait possible de passer le mot de passe automatiquement. Mais note c'est bien sûr un problème de sécurité car le mot de passe sera stocké en texte brut dans ce programme

1
hek2mgl