概要
SSHが禁止されているProxy下でSSHを使う方法です。
私が通っている学校でこれのせいで躓いたので記事にしました。
注意
Linux向けに記事を書いています。
WindowsやMacの方はいい感じに変えてください。
また、宛先のホストの443ポートがsshで開いている必要があります。(GitHubだとssh.github.comが対応)
忙しい人向け
-
corkscrew
をインストール - 以下の形式で
~/.ssh/config
に追記
Host hoge
User fuga
Hostname hoge
Port 443
IdentityFile ~/path/to/private/key
ProxyCommand corkscrew <プロキシサーバーのドメインかIP> <プロキシサーバーのポート> <宛先のドメインかIP> <宛先のポート>
(ドメインにはhttp://
などはつけない)
-
ssh fuga@hoge
を実行 - 接続できる!!!うれしい!!!
解説(何してるか気になる人向け)
corkscrewって何
HTTP プロキシによる SSH のトンネリングを行うためのツール
Archwikiより引用
というわけでcorkscrewはHTTPProxy下でSSH通信を行いたいときに、プロキシサーバーに対して偽装を行うためのツールとなります。
configの中身
重要な点だけ掻い摘んで紹介します
Port 443
これは宛先ポートの指定です。
HTTPトンネリングを行うことでプロキシサーバーの監視を掻い潜るのでこれを設定しない場合プロキシサーバーから403(利用禁止)のレスポンスが返ってきます。
ProxyCommand ...
ProxyCommand corkscrew <プロキシサーバーのドメインかIP> <プロキシサーバーのポート> <宛先のドメインかIP> <宛先のポート>
ProxyCommandはサーバーへの接続方法の指定となっています。
そしてここでcorkscrewを使い、トンネリングを行うことによってプロキシサーバーを誤魔化しつつSSH接続を行うことができます。
使用例(GitHub)
GitHubではssh.github.comの443ポートに対してトンネリングを行うことができます。
ここではSSH鍵を~/.ssh/key
、プロキシサーバーをproxy.server.dayo.com
、ポートを12345
とします。
Host ssh.github.com
User git
Hostname ssh.github.com
Port 443
IdentityFile ~/.ssh/key
ProxyCommand corkscrew proxy.server.dayo.com 12345 ssh.github.com 443
このファイルを書いたあと、ssh -T git@ssh.github.com
を実行すると返答を確認できます。
PTY allocation request failed on channel 0
Hi isso0424! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
zsh: exit 1 ssh git@github.com
さいごに
HTTPトンネリングという物の存在を今日始めて知ったので「世界って便利だなぁ...」ってなりました。
これからもこんな感じで広い方面に知識を付けていけたらと思います。