Today I come to you with a script I’ve created that helps to set the http_proxy/https_proxy/ftp_proxy/no_proxy variables and configruations for Yum, Git, and other basic commands that may make sure of these configurations.
I created this one due to the need to easily jump on any Linux Box and punch through a proxy then remove my credentials after.
This script uses strictly native Bash functionality to create a completely native Linux approach towards setting required configurations when working behind a Corporate Proxy.
The process would be as follows:
- Open SSH Terminal (Or Git-Bash/Cygwin)
- Execute this Bash Script using the “source” command
- Perform your Required Commands (pip/curl/yum/wget/etc)
Here is the script:
#!/bin/bash
##################################
#### Defining URL Encode ####
#### Function for Passwords ####
#### with Special Characters ####
#################################
rawurlencode() {
local string="${1}"
local strlen=${#string}
local encoded=""
local pos c o
for (( pos=0 ; pos<strlen ; pos++ )); do
c=${string:$pos:1}
case "$c" in
[-_.~a-zA-Z0-9] ) o="${c}" ;;
* ) printf -v o '%%%02x' "'$c"
esac
encoded+="${o}"
done
echo "${encoded}"
}
PROXY_ADDRESS=companyProxy.com
PROXY_PORT=8080
PROXY_BYPASS=localhost,127.0.0.1
ENVIRONMENT_VARIABLE_LIST="http_proxy https_proxy ftp_proxy"
GIT_ENVIRONMENT_VARIABLE_LIST="http.proxy https.proxy"
setProxy() {
###################################
#### Defining Proxy Parameters ####
###################################
echo "Enter Username: "
read USERNAME
echo "Enter Password: "
read -s PASSWORD
PASSWORD_ENCODED=$(rawurlencode $PASSWORD)
PROXY_URL="http://$USERNAME:$PASSWORD_ENCODED@$PROXY_ADDRESS:$PROXY_PORT/"
for ENVIRONMENT_VARIABLE in $ENVIRONMENT_VARIABLE_LIST
do
TEMP=$ENVIRONMENT_VARIABLE="$PROXY_URL"
export $TEMP
done
export no_proxy=$PROXY_BYPASS
###################################
#### Setting GIT Configuration ####
###################################
#for ENVIRONMENT_VARIABLE in $GIT_ENVIRONMENT_VARIABLE_LIST
#do
#Apparently Not Needed if Above Environment Variables are set
#git config --global $ENVIRONMENT_VARIABLE $PROXY_URL
#done
###################################
#### Setting YUM Configuration ####
###################################
echo proxy=http://$PROXY_ADDRESS:$PROXY_PORT >> /etc/yum.conf
echo proxy_username=$USERNAME >> /etc/yum.conf
echo proxy_password=$PASSWORD >> /etc/yum.conf
}
unsetProxy() {
if [[ $suffix == *"User"* ]]; then
JAVA_ARGS+=" $prefix.$suffix=$USERNAME"
fi
sed -i '/proxy=/d' /etc/yum.conf
sed -i '/proxy_username=/d' /etc/yum.conf
sed -i '/proxy_password=/d' /etc/yum.conf
for ENVIRONMENT_VARIABLE in $ENVIRONMENT_VARIABLE_LIST
do
TEMP=$ENVIRONMENT_VARIABLE=""
export $TEMP
done
export no_proxy=""
for ENVIRONMENT_VARIABLE in $GIT_ENVIRONMENT_VARIABLE_LIST
do
git config --global --unset $ENVIRONMENT_VARIABLE
done
}
launchJavaJar() {
######################################################
#### Setting JAVA Launch Parameters Configuration ####
######################################################
echo "Type Java JAR Path: "
read JAVA_JAR_PATH
JAVA_ARGS=""
PREFIX_LIST="-Dhttp -Dhttps"
SUFFIX_LIST="proxyHost proxyPort proxyUser proxyPassword"
for prefix in $PREFIX_LIST
do
for suffix in $SUFFIX_LIST
do
if [[ $suffix == *"Host"* ]]; then
JAVA_ARGS+=" $prefix.$suffix=$PROXY_ADDRESS"
fi
if [[ $suffix == *"Port"* ]]; then
JAVA_ARGS+=" $prefix.$suffix=$PROXY_PORT"
fi
if [[ $suffix == *"User"* ]]; then
JAVA_ARGS+=" $prefix.$suffix=$USERNAME"
fi
if [[ $suffix == *"Password"* ]]; then
JAVA_ARGS+=" $prefix.$suffix=\"$PASSWORD\""
fi
done
done
JAVA_ARGS+=" -Djava.net.useSystemProxies=true"
JAVA_ARGS+=" -Djdk.http.auth.tunneling.disabledSchemes=\"\""
JAVA_ARGS+=" -Djdk.http.auth.proxying.disabledSchemes=\"\""
java $JAVA_ARGS -jar "$JAVA_JAR_PATH"
}
# Bash Menu Script Example
choiceFunction() {
SUCCESS="false"
while [ $SUCCESS == "false" ]
do
clear
echo 'Please enter your choice: '
echo "1 - Set Proxy Settings (Yum, Environment, GIT)"
echo "2 - Disable/Remote Proxy Settings (Yum, Environment, GIT)"
echo "3 - Launch Java JAR with Proxy Settings"
echo "4 - Quit"
read CHOICE
case $CHOICE in
"1") SUCCESS="true";echo "Setting Proxy..."; unsetProxy; setProxy;;
"2") SUCCESS="true";echo "Disabling Proxy..."; unsetProxy;;
"3") SUCCESS="true";echo "Launching JAR with Proxy Settings...";unsetProxy; setProxy;launchJavaJar;;
"4") SUCCESS="true";echo "Exitting..."; exit;;
*) read -p "Invalid choice, Press any key to continue..." fakeVariableIgnoreMe;;
esac
done
}
choiceFunction