近年、ICTSCでは大会をオンラインで開催することが増えてきています。その際、必要となるのがSSH接続とダイナミックポートフォワーディング(SOCKSプロキシ)です。本稿ではそれらの方法をご紹介します。
SSHとダイナミックポートフォワーディング
SSHはリモートのサーバに接続し、シェルを実行できるサービスです。Linuxなどで標準的に利用されており、サーバを運用する上でも必須となる技術です。
ダイナミックポートフォワーディングはSSHサーバを介して通信を行える機能です。例えば、SSHサーバにダイナミックポートフォワーディングを行い、SOCKSプロキシに対応しているアプリケーションで接続することで、SSHサーバからのみ接続ができるサーバに接続することができます。
ICTSCにおいては、参加者のミスオペレーションや故意に脆弱に作っている問題環境があるため、問題環境をグローバル環境に晒さないようにしています。そのため、参加者には、グローバルIPを設定してあるサーバにSSH接続してもらい、必要に応じてダイナミックポートフォワーディングしてもらうことで、問題環境に接続してもらう形が多くなっています。
SSH接続の方法
Windows 10 / Mac OS X / Linux の環境のおいて共通のコマンドで接続できます。Windows 10の場合はコマンドプロンプト、もしくはPowerShellを起動したうえで、コマンドを実行してください。Mac OS X / Linux の場合はターミナルを起動し、コマンドを実行してください。
パスワード認証の場合
ssh $USER_NAME@$HOST
$USER_NAME
にはログインユーザーの名前を、$HOST
には接続したいホストのドメイン名、もしくはIPアドレスを入力します。接続後のパスワードを求められるので、入力してください。
公開鍵認証の場合
公開鍵認証方式でsshを行う場合は、手元にある秘密鍵ファイルを指定して接続します。
ssh $USER_NAME@$HOST -i $KEY
$USER_NAME
にはログインユーザーの名前を、$HOST
には接続したいホストのドメイン名、もしくはIPアドレスを、$KEY
には秘密鍵ファイルのパスを入力してください。
例
例として、 test.example.com
に user
としてパスワード認証でログインするとします。 以下のように、ホストへの接続に成功した場合はパスワードを問われるのでuser
のパスワードを入力します。初めてホストに接続する際には、初めてホストに接続していることを確認されるので yes
と入力します。
$ ssh user@test.example.com The authenticity of host 'test.example.com (***.***.***.***)' can't be established. ECDSA key fingerprint is SHA256:***************. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'test.example.com' (ECDSA) to the list of known hosts. user@test.example.com's password:
正常にログインできた場合、自由に操作できるシェルが立ち上がっているはずです。問題を解くには開いたシェルから更に問題のVMにSSH接続する必要があるでしょう。
Windows 10 以前の環境には ssh
コマンドがインストールされていないため、自分でインストールする必要があります。[こちら](https://github.com/PowerShell/Win32-OpenSSH/releases) からダウンロードし、インストールしてください。
ダイナミックポートフォワーディングの方法
ダイナミックポートフォワーディングを行うには、通常のSSH接続に加えてオプションを追加します。具体的には以下のとおりです。
ssh -D $PROXY_PORT $USER_NAME@$HOST
$PROXY_PORT
にはダイナミックポートフォワーディングをするポートを指定します。SOCKSプロキシに対応しているアプリケーションは、ここで指定したポートでデータを送受信することで、SSHサーバを介して目的のサーバに接続することができます。
SOCKSプロキシの使い方
Windows 10
設定 > ネットワークとインターネット > プロキシ
を開くと以下の図のようになります。
そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。
プロキシサーバーを使う
をオンアドレス
にsocks://127.0.0.1
を入力ポート
に$PROXY_PORT
で設定した値を入力
Mac OS X
設定 > ネットワーク > 詳細 > プロキシ
を開くと以下の図のようになります。

そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。
SOCKSプロキシ
にチェックをつけるSOCKSプロキシサーバ
に127.0.0.1
と$PROXY_PORT
を入力
Linux
アプリケーションによって異なります。どうしてもわからない場合はFirefoxをインストールし、以下の方法で接続してください。
Firefox
オプション > ネットワーク設定 > 接続設定
を開くと以下の図のようになります。

そのうえで、以下のように設定することでSOCKSプロキシを使うことができます。
手動でプロキシを設定する
を選択SOCKS ホスト
に127.0.0.1
を入力SOCKS ホスト
と同じ行のポート
に$PROXY_PORT
を入力SOCKS v5
を選択
まとめ
以上の方法で、問題環境へはアクセスできるはずです。みなさん、頑張ってください。
ICTSC2018 1次予選の予選環境にアクセスするためには、踏み台サーバを経由してアクセスする必要があります。踏み台サーバへは、SSHもしくはVNCを用いて接続することが出来ます。
macOS
SSHを用いる場合
ターミナルを開き、以下のコマンドを実行します。
$ ssh -D [proxy-port] -p [port] [user]@[remote addr]
VNCを用いる場合
インストール方法
homebrewを用いてインストールする場合は以下のコマンドを実行してください。
$ brew cask install vnc-viewer
公式サイトを用いる場合はこちらからダウンロードしてください。
接続方法
Spotlightなどで「VNC Viewer」を開き、上部のテキストボックスにホスト名とポート番号を入力してEnterを押します。
その後、ユーザ名とパスワードを入力してログインします。
Windows
SSHを用いる場合
こちらでは、SSH接続するため環境をMobaXterm、ブラウザはfirefoxで説明させていただきます。
※MobaXterm未インストールの方はコチラから無料の方をダウンロードしてください。
※firefox未インストールの方はコチラからダウンロードしてください。
接続方法
- MobaXtermの設定
Dynamic port forwarding
を用いた新しいtunnelingを追加します。- 使用する
ポート番号
と、接続先のipアドレス
、ユーザー名
、ポート番号
を入力してください。
- firefoxの設定
- ネットワークプロキシの接続から手動でプロキシを設定します。
- その際、SOCKSの欄に
ipアドレス
とポート番号
を設定してください。
VNCを用いる場合
※UltraVNC未インストールの方はこちらからダウンロードしてください。
- 「VNC Server」の項目に接続先ip addressを入力します
- 右側にあるConnectを押して接続完了です。
こんにちは!運営委員の門脇です!
ICTSC6に参加して頂きました皆様、お疲れ様でした!
さて、準備期間中に運営はラック内配線の整理もやっていました。
今回は「運営委員が何をしていたか」を少しでもご紹介できれば、と思います。
みなさんこんにちは,トラコン未経験者にして初運営の市川です.不名誉なニュースで一時期名前が挙がった大学に通っています.
今回は僕が普段使用している作業環境について少しご紹介したいと思います.
OS
一般によく使われているOSといえば
- Windows
Macintosh
Linux
の3つですが,僕はMacintoshを使っています.(以降Macとします)
理由としてはいろいろありますが,僕はキーボード設定に関して気に入っています.
意外と注目されないのですが,標準で配列の切り替えや修飾キーの入れ替えをユーザ向けにサポートしているのはMacとLinuxの一部ディストリビューションのみです.特にMacの場合はキーボード毎に設定を変えることができるため,英字配列と日本語配列のキーボードを同時に接続して操作することができます.LinuxのX環境で配列を変えるにはsetxkbmapなどを使いますが,これはX環境側での設定にすぎないためキーボードの識別までは行うことができません.また,キーボードの接続が一旦切れるとリセットされるため,setxkbmapで行った設定は永続化させるのが少しめんどくさかったりします (.*rcに書くだけではterminalを立ち上げる必要がある).
結局のところ好みの問題です.ファイルフォーマットがHFS+なの地味に使いづらいし.
Terminal
iTermを使っています.透過設定ができるのと,tmux -CC
が便利なので気に入ってます.
Shell
もともとUbuntuを使っていたのでbashの方がよく慣れているのですが,preztoというプラグインを使うためzshを使っています.これがなかなか便利で,zshの標準機能をいいカンジに使いやすくしてくれる他にもいろんなプラグインが入っています.
- completion: 複数候補の中から一つを選択するような操作において,Tabの他にCtrl+f,b,n,pや矢印キーで候補選択を行うことができます.結構便利で,たとえばcdするときに補完だけで目的のディレクトリにたどり着くことができます.
- git: 現在のブランチ,コンフリクト状態などがひと目でわかるようになっています.(上のgifではmasterブランチで作業をしています)
ssh: ~/.ssh/configやknown_hostsをパースして,接続先の候補をリストアップしてくれます.
またpreztoはzsh標準の機能の上に処理を加えているため,非常に軽いです.各プラグインもgitのsubmoduleで管理されており,アップデートするためのコマンドも提供されているのでメンテナンスも簡単に行うことができます.
以上でざっくりと僕の作業環境の一部を紹介しました.実際にはもっと多くのツールを使用しますが,今回紹介したpreztoは割とオススメなので是非試してみてはいかがでしょうか.