GeekFactory

int128.hatenablog.com

プロキシ環境変数を対話的に設定するエイリアス&関数

多くのコマンドでは http_proxy 環境変数を設定することでHTTPプロキシを使えます。

export http_proxy='http://proxy.example.com:8080'

認証付きプロキシを使う場合は URI にユーザ名とパスワードを含めます。

export http_proxy='http://user:passwd@proxy.example.com:8080'

上記の方法では、

  • 画面にパスワードが表示されてしまう
  • 履歴にパスワードが残る

といった問題があります。

そこで、readコマンドで入力プロンプトを表示します。readコマンドは -s オプションを渡すことで、入力文字をエコーバックしないようにできます。

alias setproxy='echo -n "Password: " && read -s pw && export http_proxy="http://${pw}@proxy.example.com:8080"'

これでパスワードが表示されなくなりました。

# setproxy
Password: ←パスワードを入力
# yum update

とりあえず .bashrc にエイリアスを書いておくと便利ですが、他のユーザも使いたいかもしれません。運用が楽になりますし。

そこで、ちゃんとした関数を書きました。

# /etc/profile.d/setproxy.sh
function setproxy () {
    proxy_uri='proxy.example.com:8080'
    echo "Proxy URI: ${proxy_uri}"
    echo -n 'Proxy user: '
    read -s proxy_id
    echo
    echo -n 'Proxy password: '
    read -s proxy_pw
    echo
    export http_proxy="http://${proxy_id}:${proxy_pw}@${proxy_uri}"
    echo 'Examining connection...'
    curl -I http://www.example.com/
}

上記のファイルを /etc/profile.d/setproxy.sh に置いておくと、

  • setproxy コマンドを実行するだけで、誰でも http_proxy 環境変数を設定できる。
  • ユーザ名やパスワードは画面に表示されないし、履歴に残らない。
  • 接続を試行するので、プロキシ認証に失敗した場合は分かる。

というメリットがあります。

こんな感じで使います。

# setproxy
Proxy user: ←ユーザ名を入力
Proxy password: ←パスワードを入力
Examining connection...
HTTP/1.0 302 Found
Location: http://www.iana.org/domains/example/
Server: BigIP
Connection: Keep-Alive
Content-Length: 0

# yum update

運用ツールの一つにどうぞ。

ここにも置いてます。
https://gist.github.com/2873395