Open1

AndroidスマホからMacBookにssh接続する

ふじしろふじしろ

個人開発の際にClaude Code を利用している。
Android15からlinuxターミナルを利用できるようになったという話を聞き、スマホからリモート操作できればスマホからでもClaude Codeで開発できるのでは?と思い、スマホからリモートアクセスする環境構築してみたログ。

1. Androidにlinux terminal アプリを入れる

android側にターミナルアプリを入れます。
androidからの操作はこのターミナルを介して行います。
https://qiita.com/akishio/items/c8955a6b6e36cc556ad4

2. MacBookでリモートログインを有効化する

スマホからログインしたい対象のMacBookのリモートログインを有効化しておきます。
これをしないとリモートログインすることができません。
https://support.apple.com/ja-jp/guide/mac-help/mchlp1066/mac

3. Androidにopenssh-clientをインストールする

ここまでやれば、sshコマンドを使ってパスワードでログイン可能になる。

4. 公開鍵・秘密鍵を使って楽にログインする

必要な手順は以下

  1. ssh-keygenコマンドでクライアント側に公開鍵と秘密鍵のキーペアを生成
  2. ssh-copy-idコマンドでリモート側に公開鍵を登録
  3. (必要に応じて)configファイルを設定して簡単にログインできるようにする

参考

全般
https://tech-blog.rakus.co.jp/entry/20210727/ssh
https://tech-blog.rakus.co.jp/entry/20210512/ssh

ssh-keygen のオプション
https://takumi-oda.com/blog/2023/09/03/post-3500/

コマンドリファレンス
https://atmarkit.itmedia.co.jp/ait/articles/1701/26/news015.html
https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html


ゴールから試してみる

以下Androidのターミナル上の操作
Androidのターミナルからsshログインしてみよう
→ssh がインストールされてない

$ ssh <username>@<hostname>
-bash: ssh: command not found

https://atmarkit.itmedia.co.jp/ait/articles/1701/26/news015.html

sshのインストール

じゃあsshをインストールしなきゃ
パッケージマネージャってどれが入ってるんだろうか...
ターミナル起動時にDebian 6.1.135-1の記述があったので検索。
Debianのパッケージ管理ツールについての記述を発見。
https://www.debian.org/doc/manuals/debian-faq/pkgtools.ja.html

aptはインストールされてる?
→インストールされている

$ apt --version
apt 2.6.1 (arm64)

aptからsshをインストール

// クライアント側なのでopenssh-clientをインストール。
$ sudo apt install openssh-client
// 以下のエラーが発生した
E: unable to locate package openssh-client

// パッケージの参照が古くなっているのが原因のようなのでupdate
$ sudo apt update
// 更新成功

$ sudo apt install openssh-client
// インストール完了

$ ssh
// sshコマンドのオプション

sshをインストールできたので、sshログインしてみる
→接続拒否

$ ssh <username>@<hostname>
ssh: connect to host <hostname> port 22: Connnection refused

想定通り。
続いてmacの設定からリモートログインを許可する。

許可後、sshログインを再実行。
パスワードの入力を求められるので入力するとログイン成功

$ ssh <username>@<hostname>
Password:

ssh config ファイルにhostnameとusernameの入力を楽にする

ssh接続情報をconfigファイルに記述してログインを楽にする。
以下のように~/.ssh/configを作成する。

Host <任意の名前>
  HostName <hostname>
  User <username>

すると次のようにしてsshログインできるようになる。

$ ssh <Host>

ただしまだパスワードの入力が必要

$ ssh <Host>
Password:

ログイン形式をssh key認証方式に変更してパスワードも不要にする

ssh認証キーを作成する

// 秘密鍵と公開鍵のキーペア作成
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/<key名>
// 以下のファイル名で秘密鍵と公開鍵が作成される
// - 秘密鍵:<key名>
// - 公開鍵:<key名>.pub

// 公開鍵をリモートログインされる側に登録
$ ssh-copy-id -i <key名>.pub <Host>
Password:

ssh-copy-idコマンドはリモートに公開鍵を登録するコマンド。
ssh-copy-idが成功すると、リモート側の~/.ssh/authorized_keys<key名>.pubが追加される。

以下のようにconfigファイルにIdentityFileを追加する

Host <任意の名前>
  HostName <hostname>
  User <username>
  IdentityFile ~/.ssh/<key名>

この状態で改めてsshログインを試みる

$ ssh <Host>
// ログイン成功