November 18, 2012

Proxy settings on linux shell

Possiedo un portatile aziendale, e spesso mi trovo a fare operazioni sul mio terminale linux, che hanno bisogno di accessi ad internet. Niente di nuovo, certo! ho, però, il problema della  mia rete aziendale… esiste un proxy con autenticazione che mi controlla.

Ciò mi porta ad inserire mille volte la password del proxy (e non sono il tipo da “ricorda password”) perchè non mi piace che la mia macchina metta le credenziali al posto mio.

OK, è paranoia, ma ho scoperto di non essere il solo… e soprattutto se parliamo della shell.

Questo veloce tutorial presenta e spiega il mio script; esso imposta “a caldo” il proxy nella proprio shell di lavoro, spero che ti sia utile.

Questione di variabili

Per avere il setting del proxy sulla propria shell sono necessarie diverse variabili di ambienti, io le ho raccolte ed in pratica le imposto tutte; ecco la mia lista:

 
odyssey@Itaca:/opt/bin/tmp$ env | grep proxy

ftps_proxy=ftps://utente:password@proxy-hostname:9999
http_proxy=http://utente:password@proxy-hostname:9999
PROXYHOST=utente:password@proxy-hostname:9999
ftp_proxy=ftp://utente:password@proxy-hostname:9999
proxy_passwd=password
https_proxy=https://utente:password@proxy-hostname:9999
proxy_user=utente

Questioni di sicurezza

Purtroppo quella password in chiaro non mi piace assolutamente, ma se parliamo di variabili di ambiente non posso (o quantomeno io non conosco modo di ) nasconderle. Mi rincuora che chiudendo il terminale tali settaggi scompaiono come se fossero neve al sole.

Per tutto il resto invece ho cercato di far scomparire le tracce della mia password. In effetti se si esegue un set esplicito di quelle variabili, le informazioni vengono memorizzate nella history della shell.
Per evitare questo una prima versione dello script venivano chiesti i dati semsibili tramite il comando shell
read
In questo modo non lasciamo nulla nella storia delle istruzioni. In pratica sarebbe bastato un

read "Enter your username:" user

Obbiettivamente scrivere ogni volta il mio nome, è un pò una scocciatura; a tal proposito mi sono ingegnato a fornire alla read almeno un default. Ecco le istruzioni:

PROXY_DEFAULT_USER="staniscia"
read -e -i "$PROXY_DEFAULT_USER" -p "Please enter username: " input
user="${input:-$PROXY_DEFAULT_USER}"

In questo modo ho un comodissimo messaggio con annessa risposta di default; basta solo premere invio.

Come NON mostrare la password a video

Ho ancora un problemino con l’inserimento della password a video; la “read” mostra ciò che inseriamo! come risolvo il problema?
disabilitando l’output a video con i seguenti domandi:

echo -n "Please enter password:"
stty -echo
read pwdr
stty echo
echo ""

Tutto il codice

Ecco tutto il codice, e tutto a vostra disposizione, aspetto commenti e migliorie, un saluto

 

odyssey@Itaca:/opt/bin/tmp$ cat set-proxy.sh
#!/bin/bash
#
# Copyright 2012 Alessandro Staniscia (email : alessandro@staniscia.net)
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2, as
# published by the Free Software Foundation.#
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#
# Contributors: Alessandro Staniscia
# Stable tag: 0.1.1
# License: GPLv2
# License URI: http://www.gnu.org/licenses/gpl-2.0.html
# URI: https://www.staniscia.net
#
# Description:
# Temporarily set the proxy in linux shell
PROXY_DEFAULT_NAME="proxydmz.trs.it"
PROXY_DEFAULT_PORT="3128"
PROXY_DEFAULT_USER="staniscia"
read -e -i "$PROXY_DEFAULT_NAME" -p "Please enter proxy hostname: " input
proxy_hostname="${input:-$PROXY_DEFAULT_NAME}"
read -e -i "$PROXY_DEFAULT_PORT" -p "Please enter proxy port: " input
proxy_port="${input:-$PROXY_DEFAULT_PORT}"
read -e -i "$PROXY_DEFAULT_USER" -p "Please enter username: " input
user="${input:-$PROXY_DEFAULT_USER}"
echo -n "Please enter password:"
stty -echo
read pwdr
stty echo
echo ""
export PROXYHOST="$user:$pwdr@$proxy_hostname:$proxy_port"
export http_proxy="http://$PROXYHOST"
export https_proxy="https://$PROXYHOST"
export ftp_proxy="ftp://$PROXYHOST"
export ftps_proxy="ftps://$PROXYHOST"
export proxy_user=$user
export proxy_passwd=$pwdr
echo "Hello $user, that's all!"
/bin/bash
view raw set-proxy.sh hosted with ❤ by GitHub

You may also like...

Leave a Reply

%d bloggers like this: