LoginSignup
5
3

More than 1 year has passed since last update.

ノマドなパソコン紳士、HTTPプロキシと戦う

Last updated at Posted at 2018-09-07

問題

  • インターネットアクセスにHTTP(S)プロキシが必要な環境(社内)と、外の環境(ノマド)を行ったり来たりする。
  • curlgitscpsshrsyncwgetあたりのコマンドのプロキシ設定の切り替えが非常に面倒くさい。どうにか簡単に切り替えたい。諦めるな、戦え。

解決策

シェルスクリプトでラップしてプロキシ設定を変えてやる。

proxied
#!/bin/bash
set -eu

PROXY=http://proxy.xxx.yyy.zzz:8080
PROXY_HOST=proxy.xxx.yyy.zzz
PROXY_PORT=8080
SSH_CONFIG_FILE=~/.ssh/config_proxied

ssh() {
  command ssh -F $SSH_CONFIG_FILE "$@"
}
scp() {
  command scp -F $SSH_CONFIG_FILE "$@"
}
export GIT_SSH_COMMAND="ssh -F $SSH_CONFIG_FILE"
export RSYNC_RSH="ssh -F $SSH_CONFIG_FILE"
export http_proxy=$PROXY
export https_proxy=$PROXY
export no_proxy=localhost
export JAVA_OPTS="${JAVA_OPTS:-} -DproxyHost=$PROXY_HOST -DproxyPort=$PROXY_PORT"
"$@"
~/.ssh/config_proxied
Host                github.com
  HostName          ssh.github.com
  Port              443
  ProxyCommand      connect -H proxy.xxx.yyy.zzz:8080 %h %p

Host                gist.github.com
  HostName          ssh.github.com
  Port              443
  ProxyCommand      connect -H proxy.xxx.yyy.zzz:8080 %h %p

Host                bitbucket.org
  HostName          altssh.bitbucket.org
  Port              443
  ProxyCommand      connect -H proxy.xxx.yyy.zzz:8080 %h %p

Host                gitlab.com
  HostName          altssh.gitlab.com
  Port              443
  ProxyCommand      connect -H proxy.xxx.yyy.zzz:8080 %h %p

# そのほかプロキシを介した踏み台サーバー経由的な多段SSHな設定群....

ここで使っているconnect1、Ubuntuならapt install connect-proxy、Homebrewならbrew install connectでインストールできる。CentOS 7だとyum install connect-proxyでインストールできるが、バイナリ名がconnectではなく本当にconnect-proxyであるのでProxyCommandを変える必要があることに注意。

これでproxied ssh ...のように頭にproxiedを付けると、プロキシ経由で外部へ出るコマンドとなる。

コマンド補完

そのままではBash-Completionが働かない。なので次のコマンドを.bashrcに追加しておくとよい。

.bashrc
complete -F _command proxied
  1. もちろんcorkscrewを使っても良い。その場合はProxyCommand corkscrew proxy.xxx.yyy.zzz 8080 %h %pのような記述になるだろう。

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3