sshポートフォワーディングについてのまとめ
暗号化して安全にリモートへの接続をしたい場合に、sshのポートフォワーディングを利用するので忘れないようにメモ。VNCとかRDP(リモートデスクトップ接続)をインターネット経由するときには必須!
目次
SSHで接続できることを確認
とりあえず、接続したいコンピュータにsshで接続できることは確認しておく。ま、そりゃそうだけど。ここでは、自宅のMacから、さくらのVPSで借りたサーバー(user111、sshポート:10022)に接続する例で説明。
VPSサーバーの最初の設定とかはここを参考に↓
まずはMacのターミナルを開いてsshで接続してみる。
ssh -p 10022 user111@XXXXXX.sakura.ne.jp
ログインできればOK!
リモートのVNCサーバーにsshポートフォワーディングを利用して接続する
VNCサーバーの待ち受けポートは5901。事前にVNCで直接接続できることを確認できていれば、あとで問題が発生したときに切り分けしやすい。
VPSサーバーにVNCを入れるまではここを参考に↓
と、いうことで本題。今からやろうとしているのは、ローカルのMacの15901ポートに接続すると、その通信をサーバーのSSHを経由して5901ポートに転送するというもの。わかりにくいので、参考のために模式図を作成。こんな感じかな。
これで、リモートのVNCサーバーに接続してみる。
SSHを使って、ポートフォワーディングするには、Lオプションをつける。下のコマンドで、ローカル側(自分のMac)のポート:15901(ここのポートは任意。well-known port以外なら何でも良い。)からリモート(VNCサーバー)のポート5901にポートフォワーディングできるはず。
ssh -p 10022 -L 15901:localhost:5901 user111@XXXXXX.sakura.ne.jp
パスワードを入力したら接続できているはず。このターミナルを閉じると接続が切れてしまうので、このままで。これで、ローカル(自分のMac)で、画面共有(VNCクライアント)を使って「vnc://localhost:15901」に接続すれば、リモートのVNCサーバーに接続される。
sshポートフォワーディングをバックグラウンドで動かす
sshポートフォワーディングをするときにターミナル邪魔だと思う人はfとNのオプションをつけることでバックグラウンドで動かすこともできる。ただし、接続を切る場合にプロセスをkillする必要があるので、どちらが良いかはお好みで。
バックグラウンドで接続するとき
ssh -p 10022 -f -N -L 15901:localhost:5901 user111@XXXXXX.sakura.ne.jp
バックグラウンドのsshを停止するとき
バックグラウンドの接続プロセスをkillするときは、まず、下のコマンドでポートフォワーディングをしているプロセスのプロセスIDを取得する。
ps -ef | grep ssh
Macだとこんな感じで今動いているプロセスが出てくるので、該当するプロセスIDを確認する。
$ ps -ef | grep ssh 501 1484 1 0 141218 ?? 0:00.05 /usr/bin/ssh-agent -l 501 55135 1 0 10:48AM ?? 0:00.02 ssh -p 10022 -f -N -L 15901:localhost:5901 user111@XXXXXX.sakura.ne.jp 501 55137 55128 0 10:49AM ttys000 0:00.00 grep ssh
一番右側のCMD列が「ssh -p 10022 -f -N -L 15901:localhost:5901 user111@XXXXXX.sakura.ne.jp」となっている行の、2列目がプロセスID(この場合は「55135」)なので、その取得したプロセスIDをkillする。
kill 55135(プロセスIDが55135の場合)
sshポートフォワーディングに便利なsshのオプションまとめ
sshのオプションについてまとめてみた。ポートフォワーディングに限定したものでは無いものもあるけど必要なことがあるので。
- -L
ローカルからのポートフォワーディング - -g
ローカル以外からローカルのフォワーディングするポートにアクセスする場合に必要。 - -f
コマンドを実行する際にsshをバックグラウンドにする。下のNオプションと併用する。 - -N
接続先でのコマンド実行をしない。 - -2
SSHv2(SSHプロトコルバージョン2)だけを使用する。バージョン1よりはセキュリティが高いので、できれば指定しておいたほうが良い。 - -C
全ての通信を圧縮する。 - -4
IPv4だけを使用する。 - -v
デバッグメッセージを表示する。接続できないときはこのオプションを付けると原因を調査しやすい。