大学内のネットワーク等、管理されたネットワークでは特定のポートしか許さなかったり proxy サーバ経由の通信が必須になる等の理由で外部へ ssh 接続ができない。
そこで、本稿では SOCKS 経由での ssh を可能にする connect.c の導入と使い方を説明する。

connect.c のインストール

検索しにくい名称なのでわかりづらいが upstream はこのリポジトリの模様。

Ubuntu では公式リポジトリにあるので

$ sudo apt install connect-proxy

Mac では homebrew を用いて

$ brew install connect

でインストールできる。

接続

connect を使用して ssh で接続するには

ssh user@server.hoge -o "ProxyCommand connect -H proxyserver.hoge:port %h $p"

のように-oオプションをつける。エラーが生じる際は

ssh user@server.hoge -o "ProxyCommand connect -d -H proxyserver.hoge:port %h $p"

のように connect に-dオプションをつけると詳細に過程が出力されるのでそれを参考にするとよい。

~/.ssh/config の設定

上記のコマンドを毎回打つのは面倒なので ~/.ssh/config に設定を記述しておくと良い。例として github と bitbucket の場合を載せる。

Host github.com
  User git
  HostName ssh.github.com
  Port 443
  ProxyCommand connect -H proxyserver.hoge:port %h %p

Host bitbucket.org
  User git
  HostName altssh.bitbucket.org
  Port 443
  ProxyCommand connect -H proxyserver.hoge:port %h %p

テストは次のコマンドで実行できる。

ssh -T git@github.com
ssh -T git@bitbucket.org

config の 設定により、git cloneなども意識することなく実行できる。