コンテンツへスキップ

【iPhone】iOS 標準アプリでSSHキー(暗号鍵)を使って SSH 接続する。

iPhone の「ショートカット」機能を使って、「Raspberry Pi OS(Linux)」に鍵認証SSH 接続を試みる。

iOS 標準アプリ「ショートカット」でSSHキー(暗号鍵)を使い SSH 接続する。

iPhone の「ショートカット」とは。

気が付いたら iOS に追加されていたアプリで、iPhone 内のApp でバッチ処理をするようなイメージの機能です。

例えば、「タイマーを起動して3分セットする。」
といったような処理を作成できます。

ショートカット ユーザガイド

図1: iPhone のホーム画面。丸で囲われているのが「ショートカット」App のアイコン。
図1: iPhone のホーム画面。丸で囲われているのが「ショートカット」App のアイコン。

皆さんはカップラーメンを作る時にiPhone の時計アプリを使って3分計っていると思いますが、
その工程を思い出してみてください。

誰でも以下のような工程になると思います。

  1. 「時計アプリ」を起動する。
  2. 「タイマー機能」を選択。
  3. 「3分」セットする。
  4. スタート。

正直、面倒くさいですよね?

「ショートカット」は、この4つの処理を登録しておき、ワンタップで呼び出せるようにする機能です。

つまり、ラーメンタイマーボタンを作ることが可能なのです。

【iPhone → Raspberry Pi】 パスワードでSSH 接続する。

SSH 経由でスクリプトを実行

unimoniのアバター

この便利なショートカット機能「スクリプティング」内にSSH 接続があります。

このショートカット機能には、ラーメンタイマーを作るだけでなく、
「SSH 接続をして何々を実行する。」という操作も登録できます。
それが「SSH 経由でスクリプトを実行」という操作です。

図2: 「ショートカット」のアクション一覧。「シェル」カテゴリの中に「SSH 経由でスクリプトを実行」というアクションがある。
図2: 「ショートカット」のアクション一覧。「シェル」カテゴリの中に「SSH 経由でスクリプトを実行」というアクションがある。

呼び出し方。

図3: 「ショートカット」App を起動したところ。
図3: 「ショートカット」App を起動したところ。

ショートカットApp を開いて、「✙」ボタンをタップ。

図4: 「すべてのショートカット」画面。右上の「+」ボタンをタップして新規ショートカットを作成する。
図4: 「すべてのショートカット」画面。右上の「+」ボタンをタップして新規ショートカットを作成する。

アクションを追加をタップ。

図5: 新規ショートカット作成画面。「アクションを追加」をタップする。
図5: 新規ショートカット作成画面。「アクションを追加」をタップする。

スクリプティング をタップ。

図6: アクションの検索画面。カテゴリから「スクリプティング」を選択する。
図6: アクションの検索画面。カテゴリから「スクリプティング」を選択する。

SSH 経由でスクリプトを実行をタップ。

図7: 「スクリプティング」カテゴリのアクション一覧。「SSH 経由でスクリプトを実行」を選択する。
図7: 「スクリプティング」カテゴリのアクション一覧。「SSH 経由でスクリプトを実行」を選択する。

「表示を増やす」をタップ。

図8: アクションが追加された状態。「表示を増やす」をタップして詳細設定を表示する。
図8: アクションが追加された状態。「表示を増やす」をタップして詳細設定を表示する。

SSH 接続の設定と、実行するスクリプトが書けます。
画面下の (再生アイコン)をタップすると、テスト実行できます。

図9: SSH 接続の詳細設定画面。ホスト・ポート・ユーザー・認証方法・スクリプトを入力でき、右下の再生ボタンでテスト実行できる。
図9: SSH 接続の詳細設定画面。ホスト・ポート・ユーザー・認証方法・スクリプトを入力でき、右下の再生ボタンでテスト実行できる。

設定内容について。

ホスト:SSH 接続する端末のIP アドレス等を入力。
ポート:SSH 接続に使用するポート
ユーザー:SSH 接続するユーザー
認証:パスワード or SSH キー
パスワード:認証がパスワードならパスワードを入力。SSH キーならキーの種類が表示されます。
入力:実行するスクリプトを入力します。

Raspberry Pi にパスワードでSSH 接続してみる。

パスワードで接続するだけなら、SSH 接続できる環境があれば簡単に試せると思います。

この例ではSSH 接続して、「ls」コマンドを実行しています。

図10: 実際に入力した設定内容。ホストは 192.168.3.11、ユーザーは uniuni、認証はパスワードにして、スクリプトに「ls」を入力してテスト実行する。
図10: 実際に入力した設定内容。ホストは 192.168.3.11、ユーザーは uniuni、認証はパスワードにして、スクリプトに「ls」を入力してテスト実行する。

こんな感じにレスポンスが来ます。

図11: 実行結果。「ls」コマンドのレスポンスとしてディレクトリの一覧が返ってきた。
図11: 実行結果。「ls」コマンドのレスポンスとしてディレクトリの一覧が返ってきた。

【iPhone → Raspberry Pi】鍵認証SSH 接続する。

iPhone 公開鍵の登録手順について

次にSSH キーを使った鍵認証SSH 接続を試してみたいと思います。

通常の鍵認証SSH 接続と設定方法は同じはずなので、
iPhone の公開鍵を接続先のコンピューターに登録してやればいいと思います。

iPhone の公開鍵を共有する手段が メールとかLine とかのアプリなので、
メールなどで一旦パソコン端末に送信し、その端末からSSH 接続先の端末へ、
Authorized keys を登録するという流れで進めます。

イメージ図
図12: 公開鍵を登録する流れのイメージ図。iPhone の公開鍵をメールなどでパソコンに共有し、パソコンから接続先サーバーの authorized_keys に登録する。
図12: 公開鍵を登録する流れのイメージ図。iPhone の公開鍵をメールなどでパソコンに共有し、パソコンから接続先サーバーの authorized_keys に登録する。

公開鍵の共有

認証を「SSHキー」に切り替えて、その下のSSH キー名をタップします。

図13: 認証方法を「SSHキー」に切り替え、SSH キー名(ed25519キー)をタップする。
図13: 認証方法を「SSHキー」に切り替え、SSH キー名(ed25519キー)をタップする。


SSH キーの項目から、「公開鍵を共有」をタップ。

図14: SSH キーの詳細画面。種類は ed25519、コメントは iPhone のアカウント名になっている。「公開鍵を共有」をタップする。
図14: SSH キーの詳細画面。種類は ed25519、コメントは iPhone のアカウント名になっている。「公開鍵を共有」をタップする。

共有方法の候補から、メールを選択。

図15: 共有方法の選択画面。公開鍵の文字列が表示され、共有先として「メール」を選択する。
図15: 共有方法の選択画面。公開鍵の文字列が表示され、共有先として「メール」を選択する。

公開鍵をメールで任意のアドレスへ送信します。

図16: 公開鍵をメールで送信する画面。件名は「authorized_keys」、本文に公開鍵の文字列が入っている。
図16: 公開鍵をメールで送信する画面。件名は「authorized_keys」、本文に公開鍵の文字列が入っている。

Raspberry Pi OS への登録

空のテキストファイルを作成し、受信したメールの本文をコピペで貼り付け、
適当な名前で適当な場所に保存します。

図17: 受信した公開鍵をメモ帳に貼り付けて「iphone_pubkey.txt」として保存する。
図17: 受信した公開鍵をメモ帳に貼り付けて「iphone_pubkey.txt」として保存する。

iPhone の公開鍵を再現したので、

  • 作成したファイルを
  • SSH 接続先ユーザーホームディレクトリの.ssh フォルダ内に
  • 「authorized_keys」として登録

とすれば良いのですが

Linux であれば「ssh-copy-id」コマンドを使って登録すると、上記の作業を全部やってくれます。

Windows の場合は、OpenSSH に「ssh-copy-id」が無いので、代替コマンド無いかなーっとダメ元でググってみたらよい情報が見つかりました。(というか、一発ヒットでした。)

という訳で、下記のように登録するとクール。

例:

cat iphone_pubkey.txt | ssh uniuni@192.168.3.11 "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

分解するとこんな感じで、複数の制御を一回のセッションで終わらせています。

cat <作成したファイル>
    | (パイプ)
ssh <ユーザー名>@<ホスト名>
(↓ ダブルクォーテーションの内容を投げる)
"mkdir -p ~/.ssh
   && (AND制御演算子:実行されたら次へ...)
chmod 700 ~/.ssh
   && (AND制御演算子)
cat >> ~/.ssh/authorized_keys
   && (AND制御演算子)
chmod 600 ~/.ssh/authorized_keys"

但し、使えるのは「登録先がLinux の場合」です。
登録先が Windows だとSSH 接続後にシェルが「コマンドプロンプト」になる為、コマンドが見つからずエラーになります。
その場合は、コマンドプロンプトに合わせたコマンドを使うか、直接Windows を操作してauthorized_keys を作成してもOK です。

実行すると、フィンガープリントの件が来て、パスワードを聞かれます。
パスワードを入力すると、登録完了です。

図18: PowerShell で「cat iphone_pubkey.txt | ssh ...」を実行。フィンガープリントの確認とパスワード入力を経て、authorized_keys への登録が完了した。
図18: PowerShell で「cat iphone_pubkey.txt | ssh …」を実行。フィンガープリントの確認とパスワード入力を経て、authorized_keys への登録が完了した。

参考:

Windowsでssh-copy-idっぽいことをしたい

Raspberry Pi の方を確認すると、キーが登録されているのが確認できます。

図19: Raspberry Pi 側のターミナルで「cat .ssh/authorized_keys」を実行し、iPhone の公開鍵が登録されているのを確認。
図19: Raspberry Pi 側のターミナルで「cat .ssh/authorized_keys」を実行し、iPhone の公開鍵が登録されているのを確認。

鍵認証接続の動作確認

SSH キーで認証(接続)できて、正常なレスポンスが返ってきました。

図20: 認証を「SSHキー」に設定してテスト実行。SSH キーでの認証接続に成功し、「ls」の結果が正常に返ってきた。
図20: 認証を「SSHキー」に設定してテスト実行。SSH キーでの認証接続に成功し、「ls」の結果が正常に返ってきた。

以上です。

(Visited 7,817 times, 1 visits today)

「【iPhone】iOS 標準アプリでSSHキー(暗号鍵)を使って SSH 接続する。」への2件のフィードバック

  1. ピンバック: インターネット経由でWOL する。「プランB」 - .zapping

  2. ピンバック: Windows で SSH 接続する時のまとめ。Windows 10、Windows Server 2016、2019 - .zapping

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です