Установить настройки прокси-сервера системы Ubuntu без перезагрузки из командной строки


14

Я использую Ubuntu 14.04. Я хочу изменить http proxyнастройки из командной строки. Это должно быть эквивалентно изменению в графическом интерфейсе (Все настройки-> Сеть-> Сетевой прокси) и нажатию кнопки Apply System Wide. Я не хочу перезагружать / выходить из системы, так как я планирую динамически изменять настройки из скрипта ( bash).


askubuntu.com/questions/175172/… . В комментарии к ответу сказано делать sudo service network manager restart.
Рамеш

@ Рамеш это не работает. Я уже прошел этот вопрос.
ma08

Ответы:


15

Из того, что я понимаю, настройка прокси для всей системы через этот графический интерфейс делает три вещи:

  1. Установите соответствующие значения в базе данных dconf.
  2. Установите значения в /etc/environment.
  3. Установите значения в /etc/apt/apt.conf.

1 и 3 вступают в силу немедленно. /etc/environmentанализируется при входе в систему, поэтому вам нужно выйти и войти, чтобы это вступило в силу. (Обратите внимание, что это правильный вход в систему, а не просто запуск оболочки входа в систему.) Следующий скрипт должен быть эквивалентен (при условии использования http / https прокси):

#! /bin/bash
HTTP_PROXY_HOST=proxy.example.com
HTTP_PROXY_PORT=3128
HTTPS_PROXY_HOST=proxy.example.com
HTTPS_PROXY_PORT=3128

gsettings set org.gnome.system.proxy mode manual
gsettings set org.gnome.system.proxy.http host "$HTTP_PROXY_HOST"
gsettings set org.gnome.system.proxy.http port "$HTTP_PROXY_PORT"
gsettings set org.gnome.system.proxy.https host "$HTTPS_PROXY_HOST"
gsettings set org.gnome.system.proxy.https port "$HTTPS_PROXY_PORT"

sudo sed -i.bak '/http[s]::proxy/Id' /etc/apt/apt.conf
sudo tee -a /etc/apt/apt.conf <<EOF
Acquire::http::proxy "http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT/";
Acquire::https::proxy "http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT/";
EOF

sudo sed -i.bak '/http[s]_proxy/Id' /etc/environment
sudo tee -a /etc/environment <<EOF
http_proxy="http://$HTTP_PROXY_HOST:$HTTP_PROXY_PORT/"
https_proxy="http://$HTTPS_PROXY_HOST:$HTTPS_PROXY_PORT/"
EOF

Несмотря на то, что PAM требует повторного входа в систему для применения /etc/environmentвезде, в текущей оболочке вы можете извлечь значения из этого файла:

export http_proxy=$(pam_getenv http_proxy)

@ ma08 Из чего получается gsettings get org.gnome.system.proxy mode; gsettings get org.gnome.system.proxy.http host; gsettings get org.gnome.system.proxy.http port;?
Муру

Теперь у меня возникает проблема, когда я запускаю скрипт от имени обычного пользователя, (process:9662): dconf-WARNING **: failed to commit changes to dconf: Could not connect: Connection refusedдля каждой команды в gsettings появляется предупреждение . Если я запускаю его как root, он работает нормально, но выходные данные вышеприведенных команд (get) изменяются только в корне, но не в обычном пользователе.
ma08

Ааааа .. Чертов сценарий изобилует ошибками. Это три, которые я должен был исправить. : / Во втором sudo teeобратите внимание, что имя файла есть /etc/environmentи нет /etc/apt/apt.conf. Возможно, вам придется удалить записи мусора в apt.conf.
Муру

Похоже, проблема заключается в предупреждении, которое я сказал в комментарии ранее.
ma08

1
Спасибо, ваш скрипт работает, и этот ответ в ссылке помог преодолеть эту ошибку. Я должен был сделать отладку сам. Большое спасибо.
ma08

3

Я сделал инструмент ProxyMan, чтобы упростить всю задачу. Вы можете скачать его по этой ссылке .

Кроме того, вы можете взглянуть на код, если вам больше интересно знать, как работает бэкэнд. Скачайте zip-файл, распакуйте его, перейдите к расположению извлеченных файлов в терминале, и вам помогут следующие команды:

  • bash main.sh: установить и сбросить прокси.
  • bash proxy_check.sh: чтобы проверить текущие настройки прокси.

1
Это потрясающий маленький инструмент! Спасло мне кучу работы!
Gh0sT

-2

Я думаю, что это должно избежать головной боли:

Видео настроек прокси

Отличный учебник, работающий на Python. Настройка простых и аутентифицированных настроек прокси в Ubuntu 12.04 / 12.10 / 13.04 / 13.10 / 14.04 / 14.10 и выше 100% Работа.

Решение 1 В системе должен быть установлен «питон». Когда интерпретатор выполняет команду: Команда: "sudo python setproxy.py [Proxy_Server] [proxy_port] [PROXY_USER] [proxy_password]"

Видео: https://www.youtube.com/watch?v=eBtzKa-dvJg

[ Proxy_Server ] : proxy.test.ts
[ Proxy_port ] : 8080
[ PROXY_USER ] : domainuser
[ Proxy_password ] : " the_password "

Решение 2: команды:

"Sudo apt- get install python- support"
"Sudo apt- get install ntlmaps "

Заполните поля соответствующим образом:

- Proxy server
- Proxy port
- User
- Password

2
Чтобы сделать это хорошим ответом, вы должны как минимум наметить шаги.
Джули Пеллетье
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.