EPISODE 02

モバイルワークを試行錯誤するブログ

iPadでMac mini ServerにSSH接続する

Mac miniとServer.appはほとんどメンテナンスも行うことなく快適に稼働しているけど、今後のことも考えて、外出先からiPadやiPhoneのSSHクライアントを利用しリモート操作を実行する環境を整えたので、メモしておく。Mac miniのリモート操作はChromeリモートデスクトップを使う方法もあるけど、動作も怠慢だし決して使いやすいとはいえない。そもそもiOSでmacOSのGUIを操作するというのに無理があるという認識。

iOSのSSHクライアントでmacOSを操作するメリット

・いつでもどこでもmacOSのリソースを活用できること
・CUIなので操作が軽快にできること
・セキュリティの観点からも安全に接続できること
・macOS側の画面解像度に依存しないこと

ガリガリ開発をする想定もないが、Mac miniのリソースはまだまだ余裕があるため、iPadでは実現しにくい自動化作業などを検証したいというのはある。

検証する環境は以下の通り

サーバ側

・Mac:Mac mini 2014
・OS:macOS Sierra
・Server:macOS Server 5.2
・ルータ:AirMac Extreme
・IPアドレス:固定IP、ドメイン取得設定済

今回の検証ではmacOS Server 5.2は特に必要としていない。

クライアント側

・端末:iPad Pro 9.7
・OS:iOS 10.2
・SSHクライアント:Prompt 2 - SSH クライアント

設定手順概要

1)macOSの共有設定
2)macOSのSSH設定
3)SSHクライアントのアプリ内設定

1)macOSの共有設定

システム環境設定の共有で、リモートログインの許可とユーザの設定を行う
AirMac Extremeもリモートログインが許可されていることを確認する

f:id:bcorp:20161229012120p:plain

2)SSHの設定

認証キーの作成
macOSのターミナルを起動して以下のコマンドを入力する。(user文字列は適宜置き換える)

$ ssh-keygen -t rsa

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/user/.ssh/id_rsa): #未入力でEnter
Enter passphrase (empty for no passphrase): #未入力でEnter
Enter same passphrase again: #未入力でEnter

秘密鍵、公開鍵が生成されていることの確認

$ cd ~/.ssh/
$ ls
id_rsa id_rsa.pub #id_rsa:秘密鍵、id_rsa.pub:公開鍵

公開鍵、秘密鍵の設定

$ cat id_rsa.pub >> authorized_keys #id_rsa.pubをauthorized_keysへ統合
$ chmod 600 authorized_keys #アクセス権を設定
$ rm id_rsa.pub # id_rsa.pubを削除
$ cp id_rsa /Users/user/Desktop # 秘密鍵をデスクトップにコピー
$ rm id_rsa #id_rsaを削除

SSHの設定変更
セキュリティの観点から、sshd_configで、rootログイン、公開鍵認証、rhost接続、パスワード認証、空パスワード認証、チャレンジレスポンス認証の設定変更、ポート番号の変更を行う。

$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak #sshd_configのバックアップ作成
$ sudo vi /etc/ssh/sshd_config #sshd_configの編集

viでsshd_configのパラメータ変更と確認を行う。

PermitRootLogin no #rootログインを禁止
RSAAuthentication yes #RSA公開鍵認証を有効にする
PubkeyAuthentication yes #RSA公開鍵認証を有効にする
AuthorizedKeysFile /Users/user/.ssh authorized_keys #authorized_keysのpath設定
PasswordAuthentication no #パスワード認証を禁止
PermitEmptyPasswords no #空のパスワードの利用を禁止
ChallengeResponseAuthentication no #チャレンジレスポンス認証を禁止

変更後保存しviを閉じる。

ポート番号の変更

$ sudo vi /etc/services

ssh 22/udp # SSH Remote Login Protocol
ssh 22/tcp # SSH Remote Login Protocol
を以下に変更する。
ssh 9122/udp # SSH Remote Login Protocol
ssh 9122/tcp # SSH Remote Login Protocol

変更し保存したらviを閉じssh設定を読み込む。

$ sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
$ sudo launchctl load /System/Library/LaunchDaemons/ssh.plist

AirMac Extremeの設定
AirMacユーティリティを立ち上げて、ネットワークタブ > ポート設定 > リモートログイン(SSH)> 編集 >

パブリックTCPポート:9122、プライベートTCPポート:9122

に設定して再起動する。

f:id:bcorp:20161229012148p:plain

iPadのSSHクライアント設定

iPadはmacOSと異なりTerminal.appは存在しないため、別途App StoreからSSHクライアントアプリをダウンロードしておく。いくつか種類があるけど、今回は日本語入力にも対応したPrompt 2を選定した。

秘密鍵をiPadにコピーする
macOSのSSH設定時にデスクトップでコピーした秘密鍵id_rsaをテキストエディタで開き中のテキスト全てをiPadにコピーする。AirDropでもクラウド経由でも好みの方法で。

Prompt 2のアプリ内設定
事前に秘密鍵ファイルのテキストを全てをPadのクリップボードにコピーしておく。アプリを立ち上げたらサーバ情報入力画面に遷移するので、以下の情報を入力する。

f:id:bcorp:20161229012232j:plain

SSH: yourdomain.com
ポート:9122
ユーザ名:サーバ設定で設定したユーザ名を入力
パスワード:入力せずに鍵アイコンをタップする

認証鍵リストのウィンドウが立ち上がったら+をタップする。

f:id:bcorp:20161229012256j:plain

クリップボードからペーストをタップする。

f:id:bcorp:20161229012323j:plain

読み込まれた認証鍵にチェックを入れる。

f:id:bcorp:20161229013324j:plain

秘密鍵をコピーをタップする。

f:id:bcorp:20161229012352j:plain

接続をタップするとSSHでMac miniに接続される。


使い勝手

当然だがMacのTerminalと同じコマンドで操作することができる。PythonもRubyも思いのままだ。アプリの使い勝手は別エントリーする予定だけど、外付けキーボード(Bluetoothキーボード)でも日本語入力含め問題なく操作可能なことは確認できた。iPadを含むタブレットでmacOSのGUIを操作することはかなりのストレスだけど、Terminalならば十分実用的といった感触。
まずは、いくつかスクリプトファイルを作っておいて、iPadではスクリプトを実行するだけという使い方をしながら生産性を上げる使い方を模索していきたい。