web-dev-qa-db-fra.com

Exécuter le script bash sur le serveur distant de manière non interactive

J'ai un script bash qui accepte exactement 3 arguments et j'ai créé une interface Web dans PHP pour exécuter ce script sur un serveur distant. L'utilisateur entre simplement le nom d'utilisateur Host et le mot de passe du serveur distant.

J'ai trouvé cette commande pour exécuter le script bash sur un serveur distant:

ssh root@Host 'bash -s' < script.sh

Mais cette commande demande un mot de passe et n'utilise aucun argument. Mais j'ai besoin de quelque chose qui puisse être exécuté de manière non interactive.

Quelque chose comme:

ssh root@Host -password="password" 'bash -s' < script.sh
6
Amarjit Singh

Assurez-vous d'avoir lu les considérations de sécurité


Installez sshpassc'est un outil pour l'authentification non interactive par mot de passe ssh.

Sudo apt install sshpass

Vous pouvez l'utiliser comme:

sshpass -p 'password' ssh user@server/IP

Puis utilisez-le comme ceci pour exécuter votre script avec ses arguments:

sshpass -p 'password' ssh user@server "bash -s" < ./script.sh arg1 arg2

Si cela ne fonctionne pas, je suggère d'utiliser scpet de déplacer votre script sur un serveur distant, puis exécutez votre commande et supprimez le script:

sshpass -p 'password' scp script.sh user@server:/tmp/script.sh
sshpass -p 'password' ssh user@server /tmp/script.sh arg1 ar2 arg3
sshpass -p 'password' ssh user@server rm /tmp/script.sh

Considérations sur la sécurité [man sshpass]

Avant tout, les utilisateurs de sshpass doivent comprendre que l'insistance de ssh sur l'obtention du mot de passe uniquement de manière interactive n'est pas sans raison. Il est presque impossible de stocker de manière sécurisée le mot de passe, et les utilisateurs de sshpass devraient déterminer si l'authentification par clé publique de ssh offre la même expérience utilisateur final, tout en réduisant les soucis et en garantissant une sécurité accrue.

L'option -p doit être considérée comme la moins sécurisée de toutes les options de sshpass. Tous les utilisateurs du système peuvent voir le mot de passe dans la ligne de commande avec une simple commande "ps". Sshpass fait une tentative minimale pour cacher le mot de passe, mais de telles tentatives sont vouées à créer des conditions de concurrence sans résoudre réellement le problème. Les utilisateurs de sshpass sont encouragés à utiliser l'une des autres techniques de mot de passe, qui sont toutes plus sécurisées.

En particulier, les personnes qui écrivent des programmes destinés à communiquer le mot de passe par programme sont encouragées à utiliser un canal anonyme et à transmettre l'extrémité de lecture du canal à sshpass à l'aide de l'option -d.

6
Ravexina