web-dev-qa-db-fra.com

Comment mettre la commande sshpass dans un script bash?

J'essaie d'exécuter une commande sshpass dans un script bash mais cela ne fonctionne pas.

Si j'exécute la même commande depuis le terminal, cela fonctionne bien, mais pas dans un script bash.

#! /bin/bash

sshpass -p 'password' ssh user@Host command

Je suis conscient des problèmes de sécurité mais ce n'est pas important maintenant.

Quelqu'un peut aider? Est-ce que je manque quelque chose?.

Merci

5
rcsimoes

Faites which sshpass dans votre ligne de commande pour obtenir le chemin absolu vers sshpass et le remplacer dans le script bash. 

Vous devriez probablement aussi faire la même chose avec la command que vous essayez de lancer.

Le problème peut être que ce n'est pas le trouver.

10
Emil Davtyan

Essayez l’option " -o StrictHostKeyChecking = no " sur ssh ("- o" étant le drapeau qui indique à ssh que vous allez utiliser une option). Cela accepte toute clé RSA entrante de votre connexion ssh, même si la clé ne figure pas dans la liste "hôte connu".

sshpass -p 'password' ssh -o StrictHostKeyChecking=no user@Host 'command'
9
Jotunn

1 - Vous pouvez scripter la commande sshpass's ssh comme ceci:

#!/bin/bash

export SSHPASS=password
sshpass -e ssh -oBatchMode=no user@Host

2 - Vous pouvez scripter la commande sshpass de sftp comme ceci:

#!/bin/bash

export SSHPASS=password

sshpass -e sftp -oBatchMode=no -b - user@Host << !
   put someFile
   get anotherFile
   bye
!
8
anubhava

Je ne comprenais pas comment la réponse acceptée répondait à la question de savoir comment exécuter des commandes sur le serveur après que sshpass est donné depuis le fichier de script bash. Pour cette raison, je fournis une réponse.


Après vos commandes de script fournies, exécutez des commandes supplémentaires comme ci-dessous:

sshpass -p 'password' ssh user@Host "ls; whois google.com;" #or whichever commands you would like to use, for multiple commands provide a semicolon ; after the command

Dans votre script:

#! /bin/bash

sshpass -p 'password' ssh user@Host "ls; whois google.com;"
4
Secko

Cela a fonctionné pour moi:

#!/bin/bash

#Variables
FILELOCAL=/var/www/folder/$(date +'%Y%m%d_%H-%M-%S').csv    
SFTPHOSTNAME="myHost.com"
SFTPUSERNAME="myUser"
SFTPPASSWORD="myPass"
FOLDER="myFolderIfNeeded"
FILEREMOTE="fileNameRemote"

#SFTP CONNECTION
sshpass -p $SFTPPASSWORD sftp $SFTPUSERNAME@$SFTPHOSTNAME << !
    cd $FOLDER
    get $FILEREMOTE $FILELOCAL
    ls
   bye
!

Vous devez probablement installer sshpass:

Sudo apt-get install sshpass
1
Bisca