Cotton Paper web.

campやmac、iPhone、iPadと家電

iPhoneからSSHポートフォワーディングでVNC接続

dtiブログからの移行エントリ。



これまで、iPhoneから自宅PCへのVNC接続やTVersityのWAN接続などについて書いてきました。


しかし、気になる点が1つ。


接続のためのID、PWが平文ということです。


VNCは暗号化接続のプロトコルをサポートしているものもありますが、クライアントにしたいiPhoneVNCクライアントアプリはその方法に対応していません。
※あるのかもしれませんが、知りません…


また、TVersityはhttp接続です。



これらの解決方法としては、VPNという手段もあると思います。


が、VPNは個人では敷居が高い&今更調べながらVPNの設定をする気にもなれず…(^^;


そこで、むしり取った衣笠昔とった杵柄ということで、WindowsにOpenSSHをインストールし、iPhone等からはSSHで接続、VNCTVersityへはSSHのトンネルを通って安全に接続するという方法をとることにしました。


そうすれば、ルーターに空ける穴も22番だけで済み、SSHの接続もRSA鍵認証のみにすれば、セキュリティレベルもぐっと上がります。


ぐだぐだ書いてきましたが、備忘録も兼ねて、以下、手順です。
iPhoneはJB済み、OpenSSHインストール済みの前提です。


ちなみに、iPhoneを例にしていますが、Mac OS Xに置き換えてもそのまま使えます。



Windows XPへのCygwinインストール
 ※Cygwinとは、Windows内にLinux環境を実現するものと思ってください
 ※パス等は自分の環境に合わせて適宜置き換えてください



1.ダウンロード
 new_windowCygwin
 上記リンクからSetup.exeをダウンロードします



2.インストール
 今回必要なものだけをインストールします。
 以下のものを選んでください
   Adminの中の「cygrunsrv」
   Docの中の「cygwindoc」
   Editorsの中の「vim
   Netの中の「openssh」
 すると、他に必要なものは自動的に選択されます。



3.Windows環境変数の設定
 システム環境変数の「新規」をクリックして変数名を「Cygwin」、
 変数値を「binmode ntsec tty」に設定します。

 さらに、「Path」変数の「編集」で変数値に「;C:cygwinbin」を付け加えます。

   ※ちなみに、Windowsでユーザーを追加したら、
    mkpasswd -l > /etc/passwd
    mkgroup -l > /etc/group
    でcygwinにも追加できます。



4.SSHのセットアップ
 CygwinのShellから、ssh-host-configを実行。質問には、yesで良い。
 CygwinのShellから、ssh-user-configを実行。質問には、yesで良い。

   ※sshdの設定はこのあと行います。
    サービスの実行
    Dos窓から、cygrunsrv -S sshd
    サービスの停止
    Dos窓から、cygrunsrv - E sshd



5.sshd_configの設定
※環境によって変わる場所があると思います。


Port 22
Protocol 2
HostKey /etc/ssh_host_rsa_key
SyslogFacility AUTHPRIV
LogLevel INFO
LoginGraceTime 120
PermitRootLogin no
StrictModes yes
RSAAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys2
RhostsAuthentication no
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitEmptyPasswords no
PrintMotd yes
PrintLastLog yes
KeepAlive yes
Compression yes
MaxStartups 3:30:5
AllowGroups Guroup名を記載
AllowUsers Guroup名を記載
#Banner /some/path
#Subsystem sftp /usr/libexec/openssh/sftp-server


ここまで来たら、一応パーミッションの確認をします。

700 ~/.ssh
644 ~/.ssh/authorized_keys2
600 /etc/ssh_host*_key
644 /etc/sshd_config

となっていればOKです。


以上でSSHの設定は終了です。



iPhoneで鍵の作成
クライアントであるiPhoneで、秘密鍵と公開鍵をつくります。

以下は、iPhoneのTerminalから実行します

 鍵の作成
   % ssh-keygen -t rsa
    少しチカチカした後で、パスフレーズを聞かれます。
    2回正しく打ち込めば、ホームディレクトリの下に.sshという
    サブディレクトリが作られ、その中にid_rsaとid_rsa.pubという
    2つのファイルが出来ます。

 公開鍵の設定
    SFTPなどでiPhoneから公開鍵ファイルid_rsa.pubを取り出し、Windowsに持ってきます。


以上で、iPhoneに関わる設定は終了です。


一応、パーミッションを確認すると、

600 ~/.ssh/id_rsa
600 ~/.ssh/id_rsa.pub
644 ~/.ssh/known_hosts

となっていればOKです。



WindowsCygwiniPhoneの公開鍵を追加
先ほどiPhoneから取り出した公開鍵id_rsa.pubを
ホームディレクトリの下の.ssh/authorized_keys2に追加します。

 以下は、CygwinのShellから実行します。

    追加
    % cat id_rsa.pub >> ~/.ssh/authorized_keys2


以上で設定はすべて終了です。


SSHの接続確認をしてみましょう。


単にSSHで接続する場合のコマンドは、

 ssh -l user名 IP(domain)

です。


接続して、
local:~% ssh remote
The authenticity of host 'remote (192.168.*.*)' can't be established.
DSA key fingerprint is 2e:f1:**:ff:**:**:c0:**:**:33:**:55:**:**:e4:**.
Are you sure you want to continue connecting (yes/no)? yes
Enter passphrase for key '/home/hoge/.ssh/id_rsa':
みたいな画面が出れば成功です。
秘密鍵を持っていることと、鍵作成時に入力したパスフレーズ秘密鍵の組み合わせが正しいときのみ接続できますので、安全性は高いと思います。




で、目的のVNCTVersitySSHトンネル経由の接続方法ですが、コマンド例は以下の通りです。

 SSH -L 5900:127.0.0.1:5900 -l username IP(domain)

これはつまり、ローカルの5900番ポートがSSH先のIPの5900番ポートになりますよという事です。


この場合、VNCの接続設定は、127.0.0.1の5900番になります。


通信内容は、もちろんSSHで暗号化された状態になりますので、VNCのID、PWが漏れる心配もぐっと減ります。



ということで、一通りの設定は終了です。


結構はしょったので、ある程度知識のある人しか分からないと思いますが…。


実際の運用には、ルータの設定やFWの設定も必要ですので、忘れずに。