11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ショートカット(iOS)の「ssh経由でスクリプトを実行」を使ってファイル送受信

Last updated at Posted at 2019-10-17

概要

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は好みで変更して下さい。

11
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?