トップ   編集 編集(GUI) 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS

SSH Proxy Command connect.c

Last-modified: 2015-01-25 (日) 02:57:02 (1604d)
Top / SSH Proxy Command connect.c

SSH Proxy Command connect.c

通常SSHを接続するには、そのマシンが外部へ接続出来る環境が必要になる。

しかし、環境によってはそのマシンが外部へ接続出来ず、Proxyを使うような

制限のある環境で作業を行なう必要がある。

connect.cを使うことで、HTTP Proxy経由で外部のSSHサーバに接続が可能になる。

自分は都合上cygwinで確認を行った、LinuxやNetBSDでの動作報告がNET上にある。

無論、下記は自己責任で。(cygwin)

cygwin上で実行ファイルの作成

公式サイトを見ると、gccのコマンド例が下記の通り記載がある(2009/09/16現在)

Compilercommand line to compile
UNIX cccc connect.c -o connect
UNIX gccgcc connect.c -o connect
Solaris gccconnect.c -o connect -lnsl -lsocket -lresolv
Microsoft Visual C/C++cl connect.c wsock32.lib advapi32.lib
Borland Cbcc32 connect.c wsock32.lib advapi32.lib
Cygwin gccgcc connect.c -o connect
Mac OS/Darwingcc connect.c -o connect -lresolv

cygwinの項目もあるので、この説明通りにgccを動かし実行ファイルを生成する。

$ gcc -v
/usr/lib/gcc/i686-pc-cygwin/3.4.4/specs から spec を読み込み中
コンフィグオプション: /managed/gcc-build/final-v3-bootstrap/gcc-3.4.4-999/configure --verbose --program-suffix=-3 --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-languages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gettext --enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-java-awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable-threads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exceptions --enable-hash-synchronization --enable-libstdcxx-debug
スレッドモデル: posix
gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
$ gcc connect.c -o connect 
$ ls -l
-rw-r--r-- 1 user group 91161 Oct 25  2007 connect.c
-rwxr-xr-x 1 user group 51205 Sep 16 15:29 connect.exe

出来上がったファイルを、binディレクトリに配置

$ mv connect.exe /usr/local/bin/
$ ll /usr/local/bin/connect.exe
-rwxr-xr-x 1 user group 51205 Sep 15 16:29 /usr/local/bin/connect.exe

cygwin上でSSHクライアントの設定

connectコマンドの設置が完了したら、SSHの設定を行なう。 .ssh/config ファイルを新規に作成する。

自分の場合は以下のようにしている。

$ vi .ssh/config
Host (ホスト名)
        ProxyCommand /usr/local/bin/connect.exe -R localhost -H (プロクシIP):(プロクシポート番号) %h %p
        Compression yes
        CompressionLevel 9
        ServerAliveInterval 150

これで、Host項目に書いたホスト名に接続する場合に、configに書かれたProxyCommand?が実行される。

(プロクシIP):(プロクシポート番号)は、HTTP ProxyのIPとポート番号を入力する。「 http:// 」表記は不要。

後ろにある「 %h %p 」は動的な変数なので、例通りにそのまま %h %p と入力する。

Linuxサーバ側でSSHサーバの設定

HTTP Proxyを経由する接続先SSHサーバは、デフォルトの22ポートではなく443ポートで起動させておく。

これはhttps接続と見せかけてProxy経由で接続させる為の偽造ポート。

443ポートで起動させる方法はいくつかある。

(ルータ・スイッチ経由なら、nat・napt・ポートフォワード・IPマスカレード等で対処可能 自分はルータで制御している)

sshdのconfigを編集する場合なら、以下の通り/etc/ssh/sshd_configファイルを編集する。

# vi /etc/ssh/sshd_config

ファイルの下記箇所を変更する

#Port 22
↓
Port 443

変更したらサービスのリロードを行う

# /etc/init.d/sshd reload

cygwinからssh接続

cygwinからsshコマンドを用いて接続する。自分の場合は、下記のようにしている。

$ ssh -Y -i ~/.ssh/id_dsa2 -p 443 (ユーザID)@(ホスト名)

オプション -Y はXプロトコルの転送オプション。手元の環境では -X では出来なかった。

オプション -i は任意の認証鍵を指定するオプション。

オプション -p は接続先ポート番号指定オプション。あらかじめ443ポートで設定しているサーバへ接続する。

最後に

これで外部のサーバへ接続可能にはなるが…勤め先のPCに仕込んで使用する場合は、節度を守ってほどほどに。

参考サイト

connect を使って簡単に多段 SSH を実現する方法

CygwinのOpenSSHを使って安全に自宅のWindowsにアクセス

SSH Proxy Command(本家)