Existe-t-il un moyen d'utiliser les multiples commandes dans sshpass
, j'ai essayé avec des combinaisons de différence, mais cela jette une erreur.
$ Sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no $username@$ipaddress << EOF
command_one
command_two
command_three
EOF
Quelle est la commande correcte et exacte, veuillez me fournir un exemple si possible.
Votre solution fonctionne avec ou sans SSHPASS, si cela ne fonctionne pas pour vous, il y a probablement quelque chose d'autre faux.
Notez également que vous devriez toujours citer toutes les variables.
En outre, vous ne devriez pas désactiver la stricthostkeyChecking légèrement. Si votre clé d'hôte change fréquemment, votre serveur est probablement compromis
Voici quelques façons d'accomplir votre objectif cependant:
En utilisant un séparateur de commande (;
, &&
, ||
)
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" 'command_one; command_two; command_three'
Utilisation d'un point ici (citation unique EOF pour avoir des substitutions de variables/de commande se développer sur l'hôte distant):
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" <<EOF
command_one
command_two
command_three
EOF
Utilisation d'un fichier séparé:
fichier.sh
command_one
command_two
command_three
Ensuite, exécutez comme ceci:
cat file.sh | sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress"
Utiliser un tunnel SSH:
sshpass -p "$password" ssh -f -L 3306:localhost:3306 "$username@ipaddress" sleep 300 # This will open a tunnel to the remote Host and hold it open for 5 minutes
ssh -T "$username@ipaddress" 'command_one'
ssh -T "$username@ipaddress" 'command_two'
ssh -T "$username@ipaddress" 'command_three'
Essayez-le comme ceci:
$ Sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no $username@$ipaddress << EOF
command_one;
command_two;
command_three;
EOF
J'ai fait ce qui précède et ça marche bien.