24

Is there a way to pass the username and password from a file instead of the command line via --user and --password?

Background: I want to run wget via cron and don't want the username/password show up in process view

3 Answers 3

13

Use a .wgetrc file (GNU manual) in which you can set username and passwords for either or both ftp and http.

To use the same credentials for both specify

user=casper password=CasperPassword 

or individually

ftp_user=casperftp ftp_password=casperftppass http_user=casperhttp http_password=casperhttppass 
3
  • 2
    The GNU wget manual also suggests using the -i option and feeding the username and password in from standard input. Commented May 8, 2011 at 15:08
  • 1
    Does .wgetrc provide the flexibility to work with more than one server? If not, .netrc is a better solution, see the other answer from tobias.pal Commented Feb 6, 2017 at 13:26
  • I obviously missed wget using a .netrc file, but it's documented. Commented Feb 6, 2017 at 18:13
28

I'm surprised nobody mentioned the .netrc file. Create the file if it doesn't exists and set safe permissions:

touch ~/.netrc chmod 600 ~/.netrc 

Subsequently add the hostname, username and password with the machine login and password keywords:

echo 'machine example.com login casper password CasperPassword' >> ~/.netrc 

If you then run wget https://example.com and the server responds with 401 Authorization Required, wget will retry using the username and password from the ~/.netrc file.

With curl it's needed to add the --netrc (or --netrc-optional or --netrc-file) parameter, because curl will not read the .netrc file without that.

When using this from cron, ensure that the correct HOME environment variable is set. Cron often defaults to HOME=/ (in that case you would have to create the file as /.netrc, yet a better solution would be to set an appropriate HOME at the script's start, like export HOME=/root).

The ~/.netrc file can be used for multiple hosts. More info about .netrc at inetutils manual and curl manual.

3
  • 2
    For the syntax of .netrc, see its manual, or the related curl doc. Commented Feb 6, 2017 at 13:32
  • At first I'm too careless to see the man netrc in the OP, wondering WHY this works, then @ryenus your comment saves me, thanks~ Manual is always welcome :P Then I know it's a rc file used by ftp, that is, it may not work for http. I'll try it on http later. Commented Apr 29, 2019 at 13:13
  • Quick update: .netrc does work with wget and HTTP (at least on Ubuntu 18.04). Also related cURL doc was moved here. Commented Mar 2, 2022 at 9:47
2

In many regards curl can be a better choice. Wget became a bit stale over time.

curl's -n switch can be used for this task: http://curl.haxx.se/docs/manpage.html#-n

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.