概要
iOSのバージョンが13になり、ショートカットで鍵認証のsshが使えるようになりました。これでようやく安心して外出中に自宅へssh接続出来ます。このページにはsshを経由してファイルをサーバーとやり取りする方法をまとめます。自宅raspberry piに接続されているカメラから写真を受け取るなど夢が広がります。
用意するもの
- sshサーバー(linux)
- iOS13が搭載されたデバイス
ショートカットでsshを使う
「ショートカット」->「スクリプティング」->「ssh経由でスクリプトを実行」を使います。iOS13から項目の「認証」でSSHキーを選択出来るようになっています。ホスト、ポート、ユーザをサーバに合わせて設定して下さい。
ファイル受信
「ssh経由でスクリプトを実行」はスクリプトの実行結果を出力するため、catコマンドを用いてファイルを受け取る事ができます。次のスクリプトを設定して下さい。
cat [ファイルのパス]
受け取ったファイルはクイックルックで見る事ができます。
ファイルの送信
受信と同じ要領でファイルの送信も可能です。ただし、「ssh経由でスクリプトを実行」はファイルを直接入力する事ができないため、ファイルを「Base64エンコード」を通してから渡します。Base64オプションの行区切りは「なし」に設定します。「ssh経由でスクリプトを実行」の「入力」にエンコードした結果を設定し、次のスクリプトを設定して下さい。
base64 -d > [ファイルパス]
サイズが大きい場合は圧縮してから送ると時間短縮になるかもしれません。.tar.xzでアーカイブを作成し、それをBase64でエンコードします。その場合、スクリプトを次のように変更します。
base64 -d | xz -dc | tar -O -xf - > [ファイルのパス]
メモリ制限回避
共有からスクリプトを選択すると使用可能なメモリが制限されます。大きなファイルを扱う際には「"ショートカット"Appで続行」を設定しましょう。
利用例
自宅のRaspberry piカメラで静止画を撮る
ラズパイカメラモジュールが接続されたRaspberry piにssh接続できる環境を用意して下さい。「ssh経由でスクリプトを実行」のスクリプトを次のように設定して下さい。
raspistill -o tmp.jpg
cat tmp.jpg
出力された画像は「クイックルック」で表示出来ます。
PDFをサーバーで圧縮する
ghostscriptを使ってpdfを圧縮します。前述したファイル送信と同じ要領でPDFファイルをBase64でエンコードします。「ssh経由でスクリプトを実行」の入力にBase64でエンコードしたテキストを設定し、スクリプトに次を設定して下さい。
input=$(mktemp)
output=$(mktemp)
base64 -d > ${input}
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/prepress -dNOPAUSE -dQUIET -dBATCH -sOutputFile=${output} ${input} &> /dev/null
cat ${output}
出力は「クイックルック」で確認できます。dPDFSETTINGSは好みで変更して下さい。