ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

Mac同士をSSH経由でリモート接続

MacOSX*1にはデフォルトでVNCを使った画面共有があります
なので、Mac同士で接続するのはもちろん、
WindowsからVNCクライアントでMacを操作したりできます*2


これを外部回線経由にする場合、さすがに生でポートを開けるなんてのはありえないので、
SSHを経由することになるわけですが、Windows間での話は以前書いています


SSHトンネリングでWindowsのリモートデスクトップをつなぐ - どっかのBlogの前置きのような


Macでも原理的にはこれと同じなのですが、一応自分用のメモということで、
改めて書き留めておきます...φ(・ω・`)

前提

  • リモートされるMac(以下A)
  • リモートするMac(以下B)
  • SSHで接続可能でAと同じネットワークにあるサーバ(以下C)
  • CのSSHポートは外部公開されている
  • CにはBから接続するための鍵が登録済み
  • BからCへSSHでつなげることを確認済み
  • Aは一切外部公開されていない

リモートされる側Aの作業

  1. 接続用のアカウントを作る(必要ならば)
  2. 画面共有を有効にする
  3. 共有ユーザを追加する(必要ならば)


AとBでログインアカウント名が違う場合、
AにBのユーザ名を登録する必要があります
同じの場合は不要です


次に、「システム環境設定->共有」とたどり、「画面共有」にチェックを入れます
これでVNCが有効になりますが、接続ユーザ名が違う場合、
許可するユーザに接続に使うBのユーザ名を追加する必要があります


つまり、接続ユーザ名が同じであれば、
画面共有にチェックを入れるだけです(`・ω・´)

リモートする側Bの接続方法

  1. SSHのトンネルを開ける
  2. トンネル経由でVNCクライアントを開く


以前の記事ではPuttyでの設定方法を書きましたが、
Macのターミナルにはデフォルトでsshコマンドがあるので、
オプションを与えて開くだけです

ssh [Cのユーザ名@]Cの外部向けサーバ名[ -p CへのSSHポート] -L Bのbindポート:AのローカルIP:AのVNCポート -N
例: hoge@example.com -p 12345 -L 22222:192.168.10.100:5900 -N


ポートの部分までは普通のSSH接続と同じで、後ろが違います
以前にも書いてますが、改めて確認すると・・・

  • -L:トンネリングするというオプション
  • Bのbindポート:B側がローカルで使うポート
    • Bで使ってなければ何番でもよく、外に開いておく必要もない
  • AのIP:Aが所属するネットワークでのAのプライベートIP
  • AのVNCポート:転送先であるAのVNC用ポート(通常5900)
  • -N:コマンドを受け付けず、待ち状態にする(トンネル時必須)


・・・ということです
面倒ならば、shファイルに書き留めて実行権限でも与えておくと良いでしょう


この開いた状態で、Finderの「移動->サーバへ接続」を選び、
以下のリソースを指定するだけです

vnc://127.0.0.1:さっき指定したローカルbindポート/
先ほどの例なら: vnc://127.0.0.1:22222/


試しに光ポータブルのEM回線経由でつないでみましたが、
さほど操作に支障はありませんでしたし、
環境さえ整えれば簡単で安全なので、是非お試しください(`・ω・´) b


なお、これを応用すれば、Windows->MacやMac->Windowsも簡単です
要は、トンネルを開いてクライアントの接続をローカルに向けるだけです


同じように、任意のポートを中継できるので、
例えば外部サーバのMySQLをリモートからWorkBenchで操作、なんてのも可能です
これはまた次の機会に(`・ω・´)ノ

*1:※ただし、Leopard以降に限る

*2:MacからWindowsを操作する場合は、MS謹製のリモートデスクトップクライアントがあります