web-dev-qa-db-fra.com

Misez sur un script et exécutez-le

Je souhaite télécharger un script à partir de: http://dl.dropbox.com/u/11210438/flockonus-stack.sh et l'exécuter. Ma conjecture est, pour utiliser wget le renommer, le modifier et l'exécuter.

Quelles sont les commandes pour le faire sur Ubuntu?

28
Fabiano Soriani

Attention

Avant d'exécuter le script, faites-vous confiance à la personne qui l'a écrit?

Par exemple, vous attendiez-vous à ce que le script contienne cela?

echo "brain1" > /etc/hostname

Cela va essayer de changer votre nom d'hôte.


Pour référence future, si, après avoir vérifié que le script est correct et non malveillant, vous pouvez l'exécuter sur une seule ligne comme ceci:

wget -O - http://dl.dropbox.com/u/11210438/flockonus-stack.sh | bash

Mais téléchargez-le séparément et lisez-le avant de l'exécuter la première fois.

Notez également que les invites interactives à l'intérieur du script téléchargé peuvent ne pas fonctionner correctement à l'aide de cette méthode.

53
Mikel

Scripts non interactifs

wget -O - http://website.com/my-script.sh | bash

Notez que lorsque vous utilisez cette méthode, les scripts interactifs ne fonctionneront pas.


Scripts interactifs

Pour que les scripts interactifs fonctionnent, vous pouvez utiliser ceci:

bash <(wget -qO- http://website.com/my-script.sh)

Scripts interactifs qui doivent être exécutés en tant que root

Avertissement: c'est extrêmement dangereux. Non recommandé.

Sudo su -c "bash <(wget -qO- http://website.com/my-script.sh)" root

Notez que vous ne pouvez pas utiliser simplement Sudo bash Car l'utilisation de <(...) créera un fichier virtuel et son descripteur de fichier ne sera pas accessible depuis l'instance bash de root. Il doit être exécuté sur le même utilisateur qui a besoin de lire le fichier virtuel, il doit donc être envoyé comme sa propre commande dans le shell des utilisateurs root.

11
Nathan F.

Ce script est de moi, il est sûr .. J'ai adoré le one-liner, mais il a des lignes interactives qui ne fonctionnaient pas .. ne sais pas pourquoi?

Lorsque dpkg s'exécute, appelé par apt-get, il vide stdin. Si vous utilisez une commande comme curl blah | bash, vous envoyez alors le contenu de la page à bash via STDIN. Si l'une de vos commandes est apt-get, puis s'exécute, tout le reste sera vidé.

L'astuce consiste à utiliser une commande comme celle-ci apt-get install --yes denyhosts </dev/null. Cela donne à apt-get une entrée différente, et il vide simplement/dev/null au lieu du reste de votre script.

Si vous voulez voir un exemple complet d'installation de quelque chose via un script distant, vous voudrez peut-être regarder ce script pour configuration de denyhosts

Pour mémoire, je préfère le curl plutôt que le wget pour cela, mais le wget devrait également convenir.

5
Zoredache
#!/bin/sh
if [ ! -f "/tmp/flockonus-stack.sh" ]
then
    wget -O /tmp/flockonus-stack.sh http://dl.dropbox.com/u/11210438/flockonus-stack.sh
fi

sh /tmp/flockonus-stack.sh
4
lynxman

Tous ces exemples manquent un point assez important. Si vous utilisez l'url http://dl.dropbox.com/u/11210438/flockonus-stack.sh, vous devez auditer le script chaque fois que vous le téléchargez, car il peut être modifié par n'importe qui sur le chemin réseau entre vous et dropbox. Si vous passez à http s: //dl.dropbox.com/u/11210438/flockonus-stack.sh , vous n'aurez pas cette source d'insécurité.

(Dropbox essaie de rediriger l'URL http vers https, mais dans le cas d'une attaque réseau, wget ne pourra jamais parler à la vraie dropbox et ne verra jamais la redirection)

4
pde

Essayez simplement de le télécharger comme vous l'avez spécifié avec wget, puis de l'exécuter directement. Vous pouvez avoir de la fantaisie et utiliser des variables pour le script que vous souhaitez télécharger, etc., mais cela fera l'affaire

Par exemple:

!#/bin/bash

#Change to temp directory
cd /tmp

#Download file using wget
wget http://dl.dropbox.com/u/11210438/flockonus-stack.sh

#Execute the file

sh flockonus-stack.sh
2
Brett