Làm cách nào để chạy bản cập nhật sudo apt-get update thông qua proxy trong dòng lệnh?


Câu trả lời:


91

Trong một số bản phát hành, sudo được cấu hình theo cách tất cả các biến môi trường đều bị xóa khi chạy lệnh. Để giữ giá trị cho http_proxy của bạn và sửa lỗi này, bạn cần chỉnh sửa / etc / sudoers, chạy:

visudo

Sau đó tìm một dòng có ghi:

Defaults env_reset 

và thêm vào sau nó:

Defaults env_keep = "http_proxy ftp_proxy" 

Mọi thứ sẽ bắt đầu làm việc như mong đợi.

Cảm ơn kdogksu trong Diễn đàn Ubuntu đã tìm ra giải pháp cho việc này.

Để không chỉ sửa lỗi apt-get mà cả đồ họa X11, ví dụ như synaptic, mintintall, ...), dòng sau đây /etc/sudoerssẽ thực hiện công việc:

Defaults env_keep = "http_proxy https_proxy ftp_proxy DISPLAY XAUTHORITY"

7
Có cần phải thêm "https_proxy" không?
TenLeftFingers

2
$ export http_proxy = " user: password @ proxy-server: port " và nếu mật khẩu của bạn có chứa các ký tự đặc biệt - cyberciti.biz/faq/
Kẻ

2
'env_keep' nên được thêm vào sau 'env_reset' hoặc được đặt vào vị trí của nó? Họ trông đối lập với nhau, vậy có ý nghĩa gì trong việc giữ cả hai?
Rodrigo

Mặc định env_keep = "http_proxy https_proxy ftp_proxy HIỂN THỊ XAUTHORITY" đã làm việc cho tôi! Cảm ơn ! -
Ronald

1
Bị vấp ngã sau khi duyệt rất nhiều. Điều này đã giải quyết vấn đề của tôi.
Sudipta Basak

39

Dùng cái này.

ubuntu@ubuntu:~$ cat /etc/apt/apt.conf
Acquire::http::Proxy "http://Username:Password@proxy.foo.bar.edu.au:8080";

Đây là những gì tôi sử dụng. Hoạt động hoàn hảo.

Apt cũng cho phép các cài đặt riêng lẻ được đặt trong các tệp bên dưới /etc/apt/apt.conf.d/, do đó, điều này có tác dụng chính xác như ở trên, nhưng có thể dễ duy trì hơn nếu bạn có các dòng khác trong .conftệp:

ubuntu@ubuntu:~$ cat /etc/apt/apt.conf.d/05proxy
Acquire::http::Proxy "http://Username:Password@proxy.foo.bar.edu.au:8080";

5
Tôi khuyên bạn nên chỉnh sửa phần này để giải thích cách thêm dòng đó vào tệp cấu hình. Cố gắng chạy các dòng trên dòng lệnh sẽ không làm điều đó. Ngay bây giờ câu trả lời này dựa trên một ý tưởng chính xác nhưng sẽ không hữu ích cho người mới. Thậm chí không hoàn toàn rõ ràng rằng bạn đang nói rằng dòng đó nên được thêm vào apt.conf.
Eliah Kagan

tuyệt vời !!!! hoạt động như bùa mê
Chaianu Bedajna

Trên hệ thống của tôi, tôi đã phải tạo một tệp theo /etc/apt/apt.conf.d nhưng chi tiết nhỏ - hoạt động rất tốt
dldnh

1
@dldnh: Bạn có thể tạo tệp /etc/apt/apt.confhoặc sử dụng đặt tệp cấu hình trong /etc/apt/apt.conf.d.... hoặc hoạt động! :-)
Paul Calabro

đừng quên dấu chấm phẩy hoặc bạn sẽ nhận đượcE: Syntax error /etc/apt/apt.conf:2: Extra junk at end of file
Florian Castellane

18

Điều làm việc cho tôi là:

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

Đó là một chút kỳ lạ bởi vì chỉ cần xuất http_proxy và sau đó chạy sudo echo $ http_proxy đã ngoan ngoãn in ra giá trị đã xuất


1
$http_proxyđược mở rộng trước khi sudo thậm chí được chạy.
Danh sách Jeremy

1
Điều này làm việc tuyệt vời trong một Dockerfile!
Cory Ringdahl

Đừng quên cổng cho proxy nếu được yêu cầu :)
Gilad Peleg

11
export http_proxy=http://proxyusername:proxypassword@proxyaddress:proxyport
sudo apt-get update

Việc xuất không cần sudoing và nếu proxy của bạn là ẩn danh, chỉ cần bỏ proxyusername:proxypassword@phần đó.


:-(, Tôi đang gặp lỗi "Truy cập vào dịch vụ proxy web bị từ chối!"
Renjith G

Làm các cài đặt proxy tương tự làm việc cho một cái gì đó đơn giản như wget?
Oli

vâng .. lỗi tương tự lặp lại ...
Renjith G

2
Còn về chỉnh sửa /etc/apt/apt.conf với Acquire :: http :: Proxy " MYDOMAIN \ MYNAME: MYPASS@MY.PROXY.COM: MYPORT"?
Renjith G

Bạn cũng có thể thêm phần này vào ~ / .bashrc. Rủi ro an ninh khủng khiếp mặc dù.
Scaine

3

Nếu đó là cấu hình tạm thời , bạn có thể thử điều này: sudo bash -c 'http_proxy = "http: // <proxy_host>: <proxy_port> /" apt-get update'

Bạn cần điều này, bởi vì biến môi trường cần được xác định cho tài khoản "root". Làm và xuất trước không nên làm việc.

Đối với cấu hình cố định , bạn sẽ phải sửa đổi tệp hệ thống. Điều này đã được mô tả trong câu trả lời sau về Cách kiểm tra proxy mạng thực sự được áp dụng? .


:-(, Tôi đang gặp lỗi "Truy cập dịch vụ proxy web bị từ chối!"
Renjith G

Bạn có thể phải nhập một đăng nhập và mật khẩu, phải không? Nếu vậy http_proxy phải có dạng "http: // <user>: <pass> @ <host>: <port> /"
Huygens

3

Ubuntu cực kỳ thù địch với việc xác thực proxy. Tôi sử dụng máy tính xách tay Ubuntu tại nơi làm việc và số lượng vỡ là không thể tin được.

Synaptic, Apt, Firefox, Chromium, v.v ... đều sử dụng các phương pháp khác nhau để chỉ định proxy và không có nơi nào để chỉ định thông tin đăng nhập một cách an toàn.

Một số lỗi về chủ đề: https://bugs.edge.launchpad.net/ubfox/+source/msttcorefonts/+orms/220070

https://bugs.edge.launchpad.net/ubfox/+source/apt-cacher/+orms/198138

https://bugs.edge.launchpad.net/ubfox/+source/apt/+orms/433827

https://bugs.edge.launchpad.net/ubfox/+source/b43-fwcutter/+orms/683630

Đề xuất của Oli để sử dụng xuất khẩu là cách duy nhất mơ hồ an toàn để làm điều đó. Đôi khi cũng có thể "làm mờ" hỗ trợ proxy nếu máy chủ proxy đang sử dụng xác thực thứ cấp để giảm thiểu tải trên các máy chủ xác thực chính (có lẽ là Active Directory). Đây là nơi kết nối proxy đầu tiên được xác thực bởi proxy so với AD, sau đó trong khoảng thời gian đã đặt (thường là 5 phút), tất cả các kết nối khác đều được "tin cậy" để trở thành người dùng đó. Do đó, bạn có thể mở firefox, duyệt internet (bất cứ nơi nào sẽ làm), sau đó thử tiện ích của bạn (wget, synap, bất cứ điều gì) bằng cách chỉ định proxy, nhưng để trống tên người dùng.

Ubuntu thường không thân thiện với bất kỳ môi trường doanh nghiệp nào vì nó cho phép mật khẩu được đọc dễ dàng. Seahorse là thủ phạm chính, nhưng Network Manager cũng gây sốc - kết nối với bất kỳ mạng xác thực PEAP nào và bạn vừa lưu mật khẩu của mình trong applet cho bất kỳ ai xem ai có thể mượn máy tính xách tay của bạn. Rõ ràng việc chia sẻ máy tính xách tay được coi là đặc quyền trong vùng đất Linux, vì các nhà phát triển Seahorse đã từ chối các tuyên bố về sự không an toàn. Sau đó, tôi không muốn liên lạc với các nhà quản lý mạng.


Tôi khuyên bạn nên dùng cntlm như một phương thuốc cho việc này. Nó xử lý xác thực bằng AD và bạn đặt tất cả các cài đặt proxy của mình để sử dụng 127.0.0.1 mà không yêu cầu bất kỳ thông tin xác thực nào.
laz

Nếu bạn cần xác thực với một máy khác thì mật khẩu văn bản cần được lưu trữ. "mã hóa" sẽ không thêm bất kỳ bảo mật nào, vì khóa mã hóa cần được lưu trữ trên cùng một thiết bị để có sẵn mật khẩu.
Danh sách Jeremy

Jeremy, bạn đang thực hiện cùng một cách tiếp cận bật / tắt để bảo mật như các nhà phát triển Seahorse. Tôi không nói để làm cho công cụ này là không thể, chỉ làm cho nó khó khăn. Ngay bây giờ, việc đánh cắp thông tin đăng nhập từ máy tính xách tay Ubuntu đã mở khóa là chuyện nhỏ - có thể là năm lần nhấp và bạn đã có được nó. Điều tương tự cũng không đúng với Windows - điều đó vẫn có thể xảy ra, nhưng ngay cả tôi cũng không biết làm thế nào để làm điều đó. Không có cách nào đơn giản để nâng mật khẩu từ máy Windows trong 10 phút hoặc do đó bạn có thể để máy trạm được mở khóa do tai nạn. Làm tương tự trong Ubuntu và bạn cũng có thể từ chức. Nó không đủ tốt.
Scaine

3

Bạn đã thử chỉnh sửa /etc/apt/apt.conf? Tôi sử dụng điều này để sử dụng apt đằng sau proxy công ty của chúng tôi.

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

Tôi tin rằng apt sử dụng giá trị này trừ khi $ http_proxy được xác định trong môi trường shell của bạn (tức là $ http_proxy được ưu tiên).


Tôi không chắc apt.conf vẫn đang được sử dụng ... Khi tôi cập nhật từ 8.04 đến 10.04, tôi đã kết thúc với bản cập nhật không thể, cho đến khi tôi thoát khỏi cài đặt proxy trong tệp đó - thì cài đặt proxy được đặt trong Synaptic bắt đầu làm việc lại ...
Little Jawa

Điều đó thật kỳ quặc - Tôi sử dụng apt.conf với 10.04. Tôi thấy các cài đặt trong tệp này tách biệt với các cài đặt được định cấu hình trong tùy chọn trình quản lý gói Synaptic.
Jon Brett

1
Có, apt.confvẫn nên được sử dụng. Bạn có thể thấy những cài đặt cấu hình mà apt nghĩ rằng nó đã được đặt bằng cách sử dụng apt-config dump.
Steve Beattie

0

Nếu bạn muốn chạy Cập nhật sudo apt-get update thông qua proxy trong dòng lệnh, hãy sử dụng lệnh bên dưới,

sudo apt-get -o Acquire::http::proxy="http://user:password@host:port/" update;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.