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?
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.
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.
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.
#!/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
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)
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