Bagaimana menjalankan "sudo apt-get update" melalui proxy di commandline?

Jawaban:

91

Dalam beberapa rilis, sudo dikonfigurasi sedemikian rupa sehingga semua variabel lingkungan dibersihkan saat menjalankan perintah. Untuk menjaga nilai http_proxy Anda dan memperbaikinya, Anda perlu mengedit / etc / sudoers, jalankan:

visudo

Kemudian temukan garis yang menyatakan:

Defaults env_reset 

dan tambahkan setelahnya:

Defaults env_keep = "http_proxy ftp_proxy" 

Semuanya akan mulai berfungsi seperti yang diharapkan.

Terima kasih kepada kdogksu di Forum Ubuntu untuk menemukan solusi untuk ini.

Untuk tidak hanya memperbaiki apt-get tetapi juga utilitas X11 grafis seperti eg synaptic, mintintall, ...) baris berikut di /etc/sudoersharus melakukan pekerjaan:

Defaults env_keep = "http_proxy https_proxy ftp_proxy DISPLAY XAUTHORITY"
paulo.albuquerque
sumber
7
Apakah perlu menambahkan "https_proxy" juga?
TenLeftFingers
2
$ export http_proxy = " pengguna: kata sandi @ proxy-server: port " dan jika kata sandi Anda mengandung karakter khusus - cyberciti.biz/faq/…
Alex Punnen
2
haruskah 'env_keep' ditambahkan setelah 'env_reset' atau ditempatkan di tempatnya? Mereka terlihat saling bertentangan, jadi apakah ada gunanya menjaga keduanya?
Rodrigo
Defaults env_keep = "http_proxy https_proxy ftp_proxy DISPLAY XAUTHORITY" bekerja untuk saya! Terima kasih! -
Ronald
1
Tersandung ini setelah banyak browsing. Ini menyelesaikan masalah saya.
Sudipta Basak
40

Gunakan ini.

ubuntu@ubuntu:~$ cat /etc/apt/apt.conf
Acquire::http::Proxy "http://Username:[email protected]:8080";

Inilah yang saya gunakan. Bekerja dengan sempurna.

Apt juga memungkinkan pengaturan individual untuk ditempatkan di file di bawah /etc/apt/apt.conf.d/, jadi ini memiliki efek yang persis sama seperti di atas, tetapi mungkin lebih mudah untuk dipertahankan jika Anda memiliki baris lain di .conffile:

ubuntu@ubuntu:~$ cat /etc/apt/apt.conf.d/05proxy
Acquire::http::Proxy "http://Username:[email protected]:8080";
John Cartwright
sumber
5
Saya sarankan untuk mengedit ini untuk menjelaskan cara menambahkan baris itu ke file konfigurasi. Mencoba menjalankan baris-baris itu pada command-line tidak akan berhasil. Saat ini jawaban ini didasarkan pada ide yang benar tetapi tidak akan membantu pemula. Ini bahkan tidak sepenuhnya jelas bahwa Anda mengatakan baris yang harus ditambahkan ke apt.conf.
Eliah Kagan
luar biasa !!!! bekerja seperti pesona
Shantanu Bedajna
Pada sistem saya, saya harus membuat file di bawah /etc/apt/apt.conf.d tetapi detail kecil - berfungsi dengan baik
dldnh
1
@dldnh: Anda dapat membuat file /etc/apt/apt.confatau menggunakan tempat file konfigurasi /etc/apt/apt.conf.d.... berfungsi! :-)
Paul Calabro
jangan lupa titik koma atau Anda akan mendapatkanE: Syntax error /etc/apt/apt.conf:2: Extra junk at end of file
Florian Castellane
18

Hal yang berhasil bagi saya adalah:

sudo http_proxy=http://yourserver apt-get update

Yang agak aneh karena hanya mengekspor http_proxy dan kemudian menjalankan sudo echo $ http_proxy dengan patuh mencetak nilai yang diekspor

Sam
sumber
1
$http_proxydiperluas sebelum sudo dijalankan.
Daftar Jeremy
1
Ini bekerja sangat baik di Dockerfile!
Cory Ringdahl
Jangan lupa port untuk proxy jika diperlukan :)
Gilad Peleg
11
export http_proxy=http://proxyusername:proxypassword@proxyaddress:proxyport
sudo apt-get update

Ekspor seharusnya tidak perlu sudodan jika proxy Anda anonim, cukup parit proxyusername:proxypassword@bagian itu.

Oli
sumber
:-(, saya mendapat pesan kesalahan "Akses ke layanan proxy web ditolak!"
Renjith G
Apakah pengaturan proxy yang sama berfungsi untuk sesuatu yang sederhana seperti wget?
Oli
ya .. kesalahan yang sama berulang ...
Renjith G
2
Bagaimana dengan mengedit /etc/apt/apt.conf dengan Acquire :: http :: Proxy " MYDOMAIN \ MYNAME: [email protected]: MYPORT"?
Renjith G
Anda juga dapat menambahkan ini ke ~ / .bashrc Anda. Risiko keamanan yang mengerikan sekalipun.
Scaine
3

Jika ini adalah konfigurasi sementara , Anda dapat mencoba ini: sudo bash -c 'http_proxy = "http: // <proxy_host>: <proxy_port> /" apt-get update'

Anda memerlukan ini, karena variabel lingkungan perlu didefinisikan untuk akun "root". Melakukan dan mengekspor sebelumnya seharusnya tidak berfungsi.

Untuk konfigurasi permanen , Anda harus memodifikasi file sistem. Ini sudah dijelaskan dalam jawaban berikut tentang Cara memeriksa proxy jaringan benar-benar diterapkan? .

Huygens
sumber
:-(, saya mendapat pesan kesalahan "Akses ke layanan proxy web ditolak!"
Renjith G
Anda mungkin harus memasukkan login dan kata sandi, bukan? Jika demikian http_proxy harus memiliki bentuk "http: // <user>: <pass> @ <host>: <port> /"
Huygens
3

Ubuntu sangat memusuhi proksi otentikasi. Saya menggunakan laptop Ubuntu di tempat kerja dan jumlah kerusakannya luar biasa.

Synaptic, Apt, Firefox, Chromium, dll semuanya menggunakan metode yang berbeda untuk menentukan proxy dan tidak ada tempat untuk menentukan kredensial dengan aman.

Beberapa bug pada subjek: https://bugs.edge.launchpad.net/ubuntu/+source/msttcorefonts/+bug/220070

https://bugs.edge.launchpad.net/ubuntu/+source/apt-cacher/+bug/198138

https://bugs.edge.launchpad.net/ubuntu/+source/apt/+bug/433827

https://bugs.edge.launchpad.net/ubuntu/+source/b43-fwcutter/+bug/683630

Saran Oli untuk menggunakan ekspor adalah satu-satunya cara yang samar-samar aman untuk melakukannya. Terkadang juga mungkin untuk "memalsukan" dukungan proxy jika server proxy menggunakan otentikasi sekunder untuk meminimalkan beban pada server otentikasi utama (misalnya, mungkin Active Directory). Di sinilah koneksi proxy pertama diautentikasi oleh proxy terhadap AD, kemudian untuk periode waktu yang ditentukan (biasanya 5 menit) semua koneksi lain "dipercaya" untuk menjadi pengguna itu. Oleh karena itu, Anda dapat membuka firefox, menjelajah internet (di mana saja akan melakukannya), kemudian mencoba utilitas Anda (wget, sinaptik, apa pun) dengan menentukan proxy, tetapi biarkan nama pengguna kosong.

Ubuntu umumnya memusuhi lingkungan perusahaan apa pun hanya karena memungkinkan kata sandi untuk dibaca dengan mudah. Kuda laut adalah penyebab utama, tetapi Network Manager juga mengejutkan - sambungkan ke jaringan autentikasi PEAP dan Anda baru saja menyimpan kata sandi Anda di applet agar siapa pun dapat melihat siapa yang mungkin meminjam laptop Anda. Rupanya berbagi laptop dianggap sebagai penistaan ​​di tanah Linux, karena pengembang kuda laut menolak klaim rasa tidak aman. Setelah itu, saya tidak tega menghubungi manajer jaringan-manajer.

Scaine
sumber
Saya merekomendasikan cntlm sebagai obat untuk ini. Ini menangani otentikasi dengan AD dan Anda mengatur semua pengaturan proxy Anda untuk menggunakan 127.0.0.1 tanpa memerlukan kredensial.
laz
Jika Anda perlu mengautentikasi dengan mesin lain maka kata sandi plaintext perlu disimpan. "enkripsi" tidak akan menambah keamanan, karena kunci enkripsi perlu disimpan pada perangkat yang sama agar kata sandi tersedia.
Daftar Jeremy
Jeremy, Anda mengambil pendekatan on / off yang sama untuk keamanan seperti para Seahorse devs. Saya tidak mengatakan untuk membuat hal-hal ini tidak mungkin, hanya membuatnya sulit. Saat ini, mencuri kredensial dari laptop Ubuntu yang tidak terkunci itu sepele - mungkin lima klik dan Anda sudah mendapatkannya. Hal yang sama tidak berlaku untuk Windows - mungkin masih mungkin, tetapi bahkan saya tidak akan tahu bagaimana melakukannya. Tidak ada cara sederhana untuk mengangkat kata sandi dari mesin Windows dalam 10 menit atau lebih Anda mungkin meninggalkan workstation tidak terkunci oleh kecelakaan. Lakukan hal yang sama di Ubuntu dan Anda mungkin juga menyerahkan pengunduran diri Anda. Itu tidak cukup baik.
Scaine
3

Apakah Anda mencoba mengedit /etc/apt/apt.conf? Saya menggunakan ini untuk menggunakan apt di belakang proksi perusahaan kami.

Acquire::http::proxy "http://user:password@host:port/";

Saya percaya bahwa apt menggunakan nilai ini kecuali $ http_proxy didefinisikan di lingkungan shell Anda (yaitu $ http_proxy diutamakan).

Jon Brett
sumber
Saya tidak yakin apt.conf masih digunakan ... Ketika saya memperbarui dari 8.04 ke 10.04 saya berakhir dengan pembaruan yang tidak mungkin, sampai saya menyingkirkan pengaturan proxy di file itu - maka pengaturan proxy yang diatur di Synaptic mulai bekerja lagi ...
Little Jawa
Itu aneh - saya menggunakan apt.conf dengan 10.04. Saya menemukan pengaturan dalam file ini terpisah dari yang dikonfigurasi dalam gui preferensi paket manajer Synaptic.
Jon Brett
1
Ya, apt.confmasih harus digunakan. Anda dapat melihat pengaturan konfigurasi yang menurutnya telah diatur dengan menggunakan apt-config dump.
Steve Beattie
1

Jika Anda ingin menjalankan "sudo apt-get update" melalui proxy di commandline, gunakan perintah di bawah ini,

sudo apt-get -o Acquire::http::proxy="http://user:password@host:port/" update;
Prashant Adlinge
sumber