91

How do you configure proxy settings in the Ubuntu Server or Minimal (CLI) versions using the terminal?

3 Answers 3

120

System-wide proxies in CLI Ubuntu/Server must be set as environment variables.

  • Open the /etc/environment file with vi (or your favorite editor). This file stores the system-wide variables initialized upon boot.
  • Add the following lines, modifying appropriately. You must duplicate in both upper-case and lower-case because (unfortunately) some programs only look for one or the other:

    http_proxy="http://myproxy.server.com:8080/"
    https_proxy="http://myproxy.server.com:8080/"
    ftp_proxy="http://myproxy.server.com:8080/"
    no_proxy="localhost,127.0.0.1,localaddress,.localdomain.com"
    HTTP_PROXY="http://myproxy.server.com:8080/"
    HTTPS_PROXY="http://myproxy.server.com:8080/"
    FTP_PROXY="http://myproxy.server.com:8080/"
    NO_PROXY="localhost,127.0.0.1,localaddress,.localdomain.com"
    
  • apt-get, aptitude, etc. will not obey the environment variables when used normally with sudo. So separately configure them; create a file called 95proxies in /etc/apt/apt.conf.d/, and include the following:

    Acquire::http::proxy "http://myproxy.server.com:8080/";
    Acquire::ftp::proxy "ftp://myproxy.server.com:8080/";
    Acquire::https::proxy "https://myproxy.server.com:8080/";
    

Finally, logout and reboot to make sure the changes take effect.


Sources: 1, 2. See 1 in particular for additional help, including a script to quickly turn on/off the proxies.

11
  • 1
    I need help on this. I've been trying this on a virtual Ubuntu Server 12.04 for a while now and it's not working. I have it working with a virtual Ubuntu 12.04 (non server). But I used the GUI to apply global settings. I've tried with quotes as the lower link suggests, and it didn't help. If I'm entering an IP address instead of a domain.com name does the formatting change? I've tried several combinations of things.
    – Frantumn
    Jun 14, 2013 at 18:32
  • 1
    Well, this isn't a great answer in my view because the (incorrect) proxy info I gave at install time is not located in /etc/environment. Mar 21, 2014 at 2:52
  • 1
    In my case, Ubuntu 12.04, it was not necessary to logout and reboot to make sure the changes take effect. I execute: sudo service network-manager restart Apr 3, 2014 at 15:53
  • 2
    @BBK even when using https, you may still have to connect to the proxy via http, which basically enables the proxy server to eavesdrop on your presumably safe connection.
    – s3lph
    Jan 29, 2015 at 15:04
  • 1
    This does work on archlinux ,even msys2(Windows). But not work on ubuntu, I keep getting Proxy request sent, awaiting response... No data received .
    – Mithril
    Jul 19, 2017 at 1:50
10

If you have an authenticating proxy, then the URLs will be different. Instead of:

"http://myproxy.server.com:8080/"

You'll have:

"http://user_name:[email protected]:8080/"

Note that these are still URLs, so passwords (and possibly usernames) will have to be URL encoded.

For example, a username of muru and a password of )qv3TB3LBm7EkP} would look like:

"http://muru:)qv3TB3LBm7EkP%[email protected]:8080/"

This can be done in various ways:

  1. There several websites for encoding:
  2. Programmatic:

In a pinch, you can use man url to see which characters need to be encoded:

An escaped octet is encoded as a character triplet, 
consisting of the percent character "%" followed by 
the two hexadecimal digits representing the octet code...

And the octet codes are available on man ascii.

0
                                 Proxy Environment Variables:

http_proxy: Proxy server for HTTP Traffic
https_proxy: Proxy server for HTTPS traffic
ftp_proxy: Proxy server for FTP traffic
no_proxy: Patterns for IP addresses or domain names that shouldn’t use the proxy

The value for every proxy setting, except for no_proxy, uses the same template. proxy_http=username:password@proxy-host:port

Temporary setting proxy: export HTTP_PROXY=user:[email protected]:8080

Persistent Proxy Settings: use vim ~/.bash_profile to open bash setup file, then put following lines inside it

export http_proxy=username:[email protected]:8080
export https_proxy=username:[email protected]:8081
export no_proxy=localhost, 127.0.0.1, *.my.lan

use source ~/.bash_profile to apply the changes

1
  • 1
    Thanks, I’ve corrected it. Jul 9, 2019 at 10:50

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .