Pourquoi wget donne-t-il une erreur lorsqu'il est exécuté avec sudo, mais fonctionne correctement sans?

21

J'ai essayé la commande suivante:

$ wget -q --tries=10 --timeout=20 --spider http://google.com

(À partir de ce poste SO . Je veux vérifier ma connexion Internet dans bash.)

Je reçois la sortie suivante:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://google.com/
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 302 Found
Location: http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA [following]
Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:50--  http://www.google.de/?gfe_rd=cr&ei=k_IIVreaN-yH8Qfe1Yu4CA
Connecting to 127.0.0.1:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: unspecified [text/html]
Remote file exists and could contain further links,
but recursion is disabled -- not retrieving.

Cela semble correct, quelle que soit l'exécution de la cmd sudo, je reçois ceci:

Spider mode enabled. Check if remote file exists.
--2015-09-28 09:55:27--  http://google.com/
Resolving google.com (google.com)... failed: Name or service not known.
wget: unable to resolve host address google.com

J'ai besoin de cette ligne dans un script, que j'appelle avec sudoet donc elle échoue toujours.

Quelqu'un peut-il me dire la raison? Comment puis-je travailler autour de ça?

h0ch5tr4355
la source
Désolé, je voulais réellement créer les questions dans AskUbuntu . Je ne sais pas si On-Topic ici ...
h0ch5tr4355
11
C'est sur le sujet ici.
Deltik
4
Ce serait hors sujet ici.
SnakeDoc
Cela ressemble à un problème XY . L'exécution aléatoire de wgetgoogle.com ne semble pas être un bon moyen de vérifier le bon fonctionnement d'une connexion Internet: vous pouvez par exemple utiliser une connexion autorisant les connexions HTTP avec Google, mais interdisant ce que votre script souhaite réellement faire. ; ou Google pourrait interdire à wget l’accès à leur site. Quel est le problème réel que vous avez, pour lequel vous pensez que sudo wget blahc'est une solution potentielle?
David Richerby

Réponses:

39

Vous avez un proxy défini dans votre environnement. Le vôtre semble être 127.0.0.1:3128.

Lorsque vous exécutez sudo, la variable d'environnement proxy n'est pas transmise, raison pour laquelle vous ne pouvez pas résoudre directement google.com.

Vous pouvez voir quels proxy / proxies vous avez définis dans vos variables d'environnement avec cette commande:

env | grep proxy

Informations complémentaires sur Ask Ubuntu

Remarque: Si vous souhaitez sudotransmettre la variable d'environnement de proxy HTTP, essayez ceci:

sudo http_proxy="$http_proxy" wget -q --tries=10 --timeout=20 --spider http://google.com

Vous pouvez également transmettre toutes les variables d'environnement à l'aide de sudo -E:

sudo -E wget -q --tries=10 --timeout=20 --spider http://google.com

Le débordement de pile a d'autres options pour garder la variable d'environnement quand sudoing.

Deltik
la source
5
OK, merci beaucoup d'avoir non seulement posté la réponse, mais également posté les liens pour l'explication. Travaillé pour moi parfaitement.
h0ch5tr4355
7
Vous pouvez également utiliser sudo -Epour préserver les variables d'environnement
Squidly
4
ne faire que transmettre http_proxy, ne serait-il pas sudo http_proxy=$http_proxy wget ...mieux? Si vous utilisez cela dans un script, vous n'avez pas à le changer si le proxy change.
Josef
1
Un gentil, @Josef. J'ai mis à jour la réponse avec votre suggestion.
Deltik
1
Vous pouvez également ajouter Defaults env_keep += "http_proxy ftp_proxy"à /etc/sudoerspour que sudo conserve automatiquement ces variables env.
François