SSHクライアントのproxy越えの設定方法



●概要

 自宅のインターネット環境ではファイアーウォールを気にせずにインターネットに接続できます。しかし、社内からの場合、ほぼファイアーウォールが設置され自宅環境と比較すると接続できるポートが制限されていることが多い。この場合、自宅では容易に接続できるSSHが社内からでは困難となることが多い。
 WindowsではPuTTY等を利用してSSH接続させたり、SSH接続状態を維持したままトンネルさせてHTTP接続させたりVNC接続させたりするための設定方法はインターネット上にかなりの数のページがあります。
 今回はCentOS等LinuxのSSHクライアントからファイアーウォールを通しインターネットに接続する設定を紹介します。
 ただし、社内にあるファイアーウォールの設定があらかじめ社内からのSSHによるインターネットへの接続が許可されていることが前提です。

●CentOS 6の場合

 社内プロキシサーバ:proxy.syanai.in
 社内プロキシサーバのSSH用ポート:8022
 接続したいリモートサーバ:www.internet.out
 接続したいリモートサーバのSSH用ポート:22(デフォルト)
 リモートサーバ接続時のユーザ名:hoge
 公開鍵:~/.ssh/authorized_keys2(社内ローカルサーバ上、アクセス権600)
 sshコマンド実行時の接続先ホスト名:www

 上記をコマンド実行すると、下記のとおりかなり長く打つことになります。
$ ssh -i .ssh/authorized_keys2 hoge@www.internet.out -o Proxycommand="/usr/bin/nc -X connect -x proxy.syanai.in:8022 %h %p"
 これをssh wwwと簡略するには、.ssh/configを作成します。
$ vi .ssh/config
Host www
	HostName www.internet.out
	User hoge
	IdentityFile ~/.ssh/authorized_keys2
	ProxyCommand /usr/bin/nc -X connect -x proxy.syanai.in:8022 %h %p
$ chmod 600 .ssh/config
 また、VNC over SSHを実現するには下記のconfigを作成します。
$ vi .ssh/config
Host www
	HostName www.internet.out
	User hoge
	IdentityFile ~/.ssh/authorized_keys2
        LocalForward 5912 localhost:5902
	ProxyCommand /usr/bin/nc -X connect -x proxy.syanai.in:8022 %h %p
$ chmod 600 .ssh/config
 これにより、VNCクライアントでの接続先をlocalhost:5912とすればSSHを介してリモートサーバの5902番ポートに転送し接続できるうようになります。

●CentOS 7の場合

 社内プロキシサーバ:proxy.syanai.in
 社内プロキシサーバのSSH用ポート:8022
 接続したいリモートサーバ:www.internet.out
 接続したいリモートサーバのSSH接続用ポート:22(デフォルト)
 リモートサーバ接続時のユーザ名:hoge
 公開鍵:~/.ssh/authorized_keys2(社内ローカルサーバ上、アクセス権600)
 sshコマンド実行時の接続先ホスト名:www

 ProxyCommandの内容がCentOS 6の時とは異なっていますので注意してください。また、何故かCentOS 7の場合はHostNameでFQDNを指定するとコマンド実行時に名前解決が出来ないと怒られてしまいます。そのため、実IPを記載したところ接続できるようになりました。

 上記をコマンド実行すると、下記のとおりかなり長く打つことになります。
$ ssh -i .ssh/authorized_keys2 hoge@www.internet.out o Proxycommand="/usr/bin/nc -X connect -x proxy.syanai.in:8022 %h %p"
 これをssh wwwと簡略するには、.ssh/configを作成します。
$ vi .ssh/config
Host www
	HostName www.internet.out
	User hoge
	IdentityFile ~/.ssh/authorized_keys2
	ProxyCommand /usr/bin/nc -X connect -x proxy.syanai.in:8022 %h %p
$ chmod 600 .ssh/config
 また、VNC over SSHを実現するには下記のconfigを作成します。
$ vi .ssh/config
Host www
	HostName www.internet.out
	User hoge
	IdentityFile ~/.ssh/authorized_keys2
        LocalForward 5912 localhost:5902
	ProxyCommand /usr/bin/nc --proxy proxy.syanai.in:8022 --proxy-type http %h %p
$ chmod 600 .ssh/config
 これにより、VNCクライアントでの接続先をlocalhost:5912とすればSSHを介してリモートサーバの5902番ポートに転送し接続できるうようになります。

●Rocky 8の場合

 あらかじめconnect-proxyをインストールしておきます。

 社内プロキシサーバ:proxy.syanai.in
 社内プロキシサーバのSSH用ポート:8022
 接続したいリモートサーバ:www.internet.out
 接続したいリモートサーバのSSH用ポート:22(デフォルト)
 リモートサーバ接続時のユーザ名:hoge
 公開鍵:~/.ssh/id_rsa.pub(社内ローカルサーバ上、アクセス権600)
 sshコマンド実行時の接続先ホスト名:www

 上記のような場合、下記のようにconfigを作成します。
$ vi .ssh/config
Host www
	HostName 1.XXX.XXX.XXX
	User hoge
	IdentityFile ~/.ssh/id_rsa.pub
        LocalForward 5912 localhost:5902
	ProxyCommand connect-proxy -H proxy.syanai.in:8022 %h %p
$ chmod 600 .ssh/config
 下記のように実行すると、ログインできます。
$ ssh www


●SSH多段ポートフォワード

 ネットワーク構成は下記のとおりです。
 自宅Linux -- (ssh) --> 踏み台A(moon) -- (ssh、proxy超え) --> 踏み台B(star) -- VNCサーバ(踏み台B上で動作)

 各サーバの設定内容です。
 いずれもSSH用のポートしか外部に開放されていません。

種類 ホスト名 開放ポート SSHユーザ SSH鍵のありか サーバ設定変更可否 ワンタイムパスワード ポートフォワードの設定
自宅Linux linux -- owner -- -- -- 有効(自宅Linux:35902 --> moon:35902)
踏み台A moon 20022 (SSH) hogehoge 不要 不可 有効(SSH鍵不要) 有効(moon:35902 --> star:5902)
踏み台B star 22 (SSH) starman moon 無効(SSH鍵要) --
VNCサーバ star 5902 (VNC) -- -- -- --

 star上で動作しているVNCサーバを自宅から接続します。
 VNCサーバの設定は完了しているものとします。
 VNCで接続後、Chromeを利用し社内HPにアクセスするようにします。

手順1
 star上でのVNCサーバの設定は完了しているものとする。
 star上で自分のアカウントを利用して、VNCサーバを起動します。
 起動しているかの確認
$ vncerver :2
$ ss -atm|grep 5902
LISTEN     0      5          *:5902                     *:*
LISTEN     0      5         :::5902                    :::*

OSの違いにより、下記のように表示される場合もあり。
LISTEN    0      5                    0.0.0.0:5902                          0.0.0.0:*
LISTEN    0      5                       [::]:5902                             [::]:*

終了する場合
$ vncerver -kill :2

手順2
 自宅Linuxから踏み台A(moon)に対するSSH接続用の設定を準備します。
 設定は自宅Linux上で実施します。
[owner@linux ~]$ vi .ssh/config
# 踏み台SSHサーバ
Host naps
  ServerAliveInterval 300
  HostName	100.150.***.***
  Port	20022
  User	hogehoge
  LocalForward 35902 localhost:25902

手順3
 設定は踏み台A上で実施します。 
[hogehoge@moon ~]$ vi .ssh/config
# 踏み台SSHサーバ
Host star
  HostName 172.26.***.***
  User starman
  Port 22
  IdentityFile ~/.ssh/id_rsa_star_starman
  ProxyCommand nc -x 10.***.***.***:10022 %h %p
  LocalForward 25902 star:5902
 以上で準備が出来ました。