●概要
自宅のインターネット環境ではファイアーウォールを気にせずにインターネットに接続できます。しかし、社内からの場合、ほぼファイアーウォールが設置され自宅環境と比較すると接続できるポートが制限されていることが多い。この場合、自宅では容易に接続できる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
上記をコマンド実行すると、下記のとおりかなり長く打つことになります。
●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を記載したところ接続できるようになりました。
上記をコマンド実行すると、下記のとおりかなり長く打つことになります。
●Rocky 8の場合
あらかじめconnect-proxyをインストールしておきます。
社内プロキシサーバ:proxy.syanai.in
社内プロキシサーバのSSH用ポート:8022
接続したいリモートサーバ:www.internet.out
接続したいリモートサーバのSSH用ポート:22(デフォルト)
リモートサーバ接続時のユーザ名:hoge
公開鍵:~/.ssh/id_rsa.pub(社内ローカルサーバ上、アクセス権600)
sshコマンド実行時の接続先ホスト名:www
上記のような場合、下記のようにconfigを作成します。
●SSH多段ポートフォワード
ネットワーク構成は下記のとおりです。
自宅Linux -- (ssh) --> 踏み台A(moon) -- (ssh、proxy超え) --> 踏み台B(star) -- VNCサーバ(踏み台B上で動作)
各サーバの設定内容です。
いずれもSSH用のポートしか外部に開放されていません。
star上で動作しているVNCサーバを自宅から接続します。
VNCサーバの設定は完了しているものとします。
VNCで接続後、Chromeを利用し社内HPにアクセスするようにします。
手順1
star上でのVNCサーバの設定は完了しているものとする。
star上で自分のアカウントを利用して、VNCサーバを起動します。
起動しているかの確認
手順2
自宅Linuxから踏み台A(moon)に対するSSH接続用の設定を準備します。
設定は自宅Linux上で実施します。
手順3
設定は踏み台A上で実施します。
自宅のインターネット環境ではファイアーウォールを気にせずにインターネットに接続できます。しかし、社内からの場合、ほぼファイアーウォールが設置され自宅環境と比較すると接続できるポートが制限されていることが多い。この場合、自宅では容易に接続できる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以上で準備が出来ました。