自宅PCをTailscaleで繋ぐはじめてのSSH接続チュートリアル x SSH Term【Mac/Windows両対応・2026年版】
目次
モバイルSSHの全体像は「モバイルSSH完全ガイド」でまとめています。
はじめに:自宅PCをスマホから触りたい
「自宅のMacで動いている開発環境を、外出先からスマホで操作したい」 「Windowsの自作PCに入れたAIエージェントを、通勤中にちょっと走らせたい」
こういうニーズを、ぼくも毎日感じています。薬局で働きながらコードを書く生活をしていると、自宅PCのリソースを外出先からも使えるととても助かります。
でも、いざやろうとすると壁が3つあります。
- 家庭回線のグローバルIPは変動する(プロバイダのCGNAT環境ならそもそも到達不能)
- ルーターのポート開放はセキュリティリスクが大きい
- DDNSや動的DNSの運用は地味に面倒
この3つを一気に解決してくれるのがTailscaleです。そして、スマホ側で快適に日本語コマンドを打つためのSSHクライアントがSSH Term。
この記事では、SSH Termを入れたスマホと、自宅のMac/Windows PCをTailscale経由でつなぐ手順を、初心者でも迷わないようにステップバイステップで解説していきます。
この記事で構築する全体像
graph LR
A["📱 スマホ<br/>SSH Term + Tailscale"] -->|WireGuard暗号化| B["🌐 Tailscale<br/>メッシュVPN"]
B -->|P2P直接接続| C["🖥️ 自宅PC<br/>Mac or Windows"]
スマホと自宅PCの両方にTailscaleを入れることで、両者は同じプライベートネットワーク内にいるかのように直接通信できるようになります。ルーターの設定は一切いじりません。
なぜTailscaleなのか — IP変動環境で最強の理由
1. グローバルIPが変わっても影響を受けない
Tailscaleは各デバイスに100.64.0.0/10レンジの固定アドレスを割り当てます。これはデバイスごとに紐づく永続的なアドレスで、自宅の光回線が再接続してグローバルIPが変わっても、Tailscale上のIPは変わりません。
さらにMagicDNSを有効にすれば、my-mac や home-pc のような分かりやすいホスト名でアクセスできます。「スマホからどのIPに繋ごうとしてるかをいちいち調べる」必要がなくなります。
2. CGNAT環境(マンション回線・モバイル回線)でも繋がる
ちょっと専門的に聞こえますが、ここはとても大事なポイントなので、なるべく身近な例えで説明します。
普通のインターネット = 一軒家
通常の光回線(戸建て契約など)では、契約者一人につき1つの「家の住所(グローバルIP)」がもらえます。住所がはっきりしているので、外から「この住所のここの部屋(ポート22)」を訪ねてもらうことができます。これがいわゆるポート開放(ポートフォワーディング)です。
CGNAT = 大きなマンション
一方、最近のマンション一括契約のネット回線、ahamo・楽天モバイルなどのモバイル回線、一部の格安ISPでは、1つの住所(グローバルIP)を複数の家庭で共有する仕組みが使われています。これがCGNAT(Carrier-Grade NAT)です。
例えるなら、マンション全体に1つの郵便受けしかなく、外から訪ねる人は「マンション宛て」までしか辿り着けない状態です。「○○号室(あなたの家)に直接行きたい」と言われても、マンションの管理人にあたるISPがブロックしてしまうので、外からは入って来られません。
この状態だと、従来の方法ではSSH接続することはできません。 ポート開放という機能そのものが使えないからです。
Tailscale = マンションに穴を開けずに直接通信する魔法
Tailscaleが採用しているNATトラバーサルという技術は、双方のデバイスから外向きに通信を試みることで、ファイアウォールやCGNATを「内側から」すり抜けます。これは「外から訪ねていく」のではなく「お互いが外に出て待ち合わせする」イメージです。
直接出会えない場合でも、Tailscaleが用意しているDERPリレーサーバーという中継地点を経由して、自動的に繋がるようにフォールバックしてくれます。
つまり、自宅の回線がCGNATでもマンション回線でも、何も気にせず接続できるのがTailscaleの強みです。
3. ポート22をインターネットに晒さなくていい
ポート22を世界に公開すると、ものの数分でブルートフォース攻撃のログが流れ始めます。TailscaleならSSHポートを一切公開せずに外出先から接続できるので、攻撃の対象にすらなりません。
用意するもの
| 必要なもの | 説明 |
|---|---|
| 自宅PC | Mac(macOS 13以降)または Windows 10(1809以降)/ 11 |
| スマホ | iPhone(iOS 16以降)または Android(10以降) |
| Tailscaleアカウント | Google / Microsoft / GitHubアカウントでサインアップ可能(無料) |
| SSH Term | App Store / Google Play から800円の買い切り |
| 同一のLogin Provider | スマホとPCで同じアカウントでTailscaleにログインする |
所要時間は、初めての方で40分〜1時間くらい。慣れている方なら15分で終わります。
Step 1:Tailscaleアカウントを作成する
tailscale.com にアクセスし、「Get started」からサインアップします。
- Google / Microsoft / GitHub / Apple アカウントが使えます
- 個人プラン(Personal)は無料で最大100デバイスまで接続可能
ここで使ったアカウントを、後ほど自宅PC・スマホでも使います。必ず同じLogin Providerでログインするようにしてください。別のアカウントだと違うTailnet(Tailscaleネットワーク)扱いになり、繋がりません。
Step 2-A:自宅サーバー編 — Macの場合
ここからはMacユーザー向けの設定です。Windowsの方は「Step 2-B」までスキップしていただいてOKです。
1. リモートログインを有効にする
macOSにはOpenSSHサーバーが最初から入っています。あとはオンにするだけです。
- 画面左上のAppleメニュー →「システム設定」を開く
- 左サイドバーの「一般」→「共有」をクリック
- 「リモートログイン」のスイッチをオンにする
- 「アクセスを許可:」で「すべてのユーザ」または「現在のユーザのみ」を選ぶ
これでMacがSSHサーバーになりました。
2. ターミナルでSSHが動いていることを確認
Macの「ターミナル.app」を開いて、以下を実行します。
# SSHサーバーの状態確認
sudo launchctl list | grep ssh
# → com.openssh.sshd が表示されればOK
# 自分のユーザー名を確認
whoami
# ローカルIP(Tailscaleなしで同じLAN内から繋ぐとき用)
ipconfig getifaddr en0
ローカルIPは念のため控えておくと、トラブル時にTailscaleなしで切り分けできます。
3. Tailscaleをインストール
Homebrewが入っていれば一発です。
brew install --cask tailscale
Homebrewがない場合はTailscaleの公式ダウンロードページから .pkg をダウンロードしてインストールしてください。
4. Tailscaleを起動してログイン
メニューバー右上にTailscaleのアイコンが出るのでクリック →「Log in」を選びます。ブラウザが開いてアカウント選択画面が表示されるので、Step 1で作ったアカウントでログインします。
5. Tailscale上のIPとホスト名を確認
ターミナルで以下を実行します。
tailscale status
# → 自分のMacのTailscale IPと、他のデバイスの一覧が表示される
tailscale ip -4
# → 100.x.x.x形式のIPアドレスだけが表示される
ここで表示された100.x.x.xアドレス、もしくはホスト名(例:my-mac)を後でスマホ側に入力します。
6. (任意)MagicDNSを有効にする
Tailscale管理画面 → DNSタブ → 「Enable MagicDNS」をオンにします。これで tailscale ip の代わりに my-mac のような短いホスト名でアクセスできるようになります。
Step 2-B:自宅サーバー編 — Windowsの場合
Windows 10(1809以降)と Windows 11では、OpenSSHサーバーが「オプション機能」として追加できます。
1. OpenSSH Serverをインストール
- 「設定」を開く(Win + I)
- 「アプリ」→「オプション機能」(Windows 11は「インストールされている機能」→「機能の表示」)
- 「機能の追加」をクリック
- 検索ボックスに「OpenSSH サーバー」と入力
- チェックを入れて「インストール」
または、PowerShellを管理者権限で開いて以下を実行してもOKです。
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
2. SSHサービスを起動して自動起動を有効化
PowerShellを管理者権限で開いて実行します。
# サービスを起動
Start-Service sshd
# 自動起動を有効化(PC再起動後も自動でSSHが立ち上がる)
Set-Service -Name sshd -StartupType 'Automatic'
# 状態確認
Get-Service sshd
Status: Running になっていれば成功です。
3. ファイアウォールに穴を開ける(ローカルLAN内で確認用)
OpenSSH Server をインストールすると、Windows Defender Firewall に OpenSSH SSH Server (sshd) という受信規則が自動で追加されます。手動で確認したい場合は以下を実行します。
Get-NetFirewallRule -Name *ssh*
重要:このファイアウォール設定はローカルネットワーク内での接続用です。Tailscale経由なら、結果的にWindowsファイアウォールはTailscaleインターフェースからの通信を許可してくれるので、追加設定は基本的に不要です。
4. Windowsユーザー名と接続確認
# 自分のユーザー名を確認
whoami
# → DESKTOP-XXX\username のような形式で表示される
# ローカルIPを確認
ipconfig
SSH接続時のユーザー名は \ の右側(上の例なら username)を使います。
5. Tailscaleをインストール
Tailscale公式ダウンロードページ から tailscale-setup-x.x.x.exe をダウンロードして実行します。
インストールが終わるとシステムトレイにTailscaleアイコンが現れるので、クリック →「Log in」→ ブラウザでアカウント選択でログインします。
6. Tailscale IPを確認
PowerShellまたはコマンドプロンプトで以下を実行します。
tailscale status
tailscale ip -4
100.x.x.xアドレスとホスト名(例:home-pc)を控えておきます。
7. (重要)スリープ設定の見直し
WindowsはデフォルトでしばらくするとPCがスリープします。スリープ中はSSH接続できないので、リモートで使うなら以下を変更しておきましょう。
- 「設定」→「システム」→「電源とバッテリー」
- 「画面とスリープ」を展開
- 「電源接続時、次の時間が経過した後にデバイスをスリープ状態にする」を「なし」に
ノートPCの場合はバッテリー駆動時の挙動も合わせて確認しておきましょう。
Step 3:スマホ側を準備する — SSH Term + Tailscale
ここからは Mac 編・Windows 編で共通の手順です。
1. SSH Termをインストール
- iPhone / iPad:App Storeからダウンロード
- Android:Google Playからダウンロード
買い切り800円。Pro版・サブスクなどはなく、これだけで全機能が使えます。
開示:筆者はSSH Termの開発者です。自分が薬局のサーバー管理や外出先からのClaude Code操作に困っていた経験から開発したアプリで、本記事でも実機検証ベースで設定手順を書いています。
2. Tailscaleアプリをインストール
- iPhone / iPad:App Storeで「Tailscale」を検索
- Android:Google Playで「Tailscale」を検索
インストール後にアプリを起動し、Step 1で作ったアカウントと同じLogin Providerでログインします。
3. VPNプロファイルを許可する
iOS / Androidとも、Tailscaleの初回起動時にVPN設定の許可ダイアログが出ます。「許可」をタップしてください。これでスマホがTailscaleネットワークに参加します。
4. 接続確認
Tailscaleアプリの「Devices」または「Machines」一覧に、自宅PC(MacまたはWindows)が表示されていれば成功です。緑のドットが点いていれば、現在オンラインで接続可能な状態です。
Step 4:SSH Termで自宅PCに繋ぐ
1. 新規接続を作成
SSH Termを開いて画面右上の 「+」 ボタンをタップします。
| 項目 | 入力値 |
|---|---|
| ホスト | 100.x.x.x(Tailscale IP)または my-mac / home-pc(MagicDNS有効時) |
| ポート | 22(変更していなければ) |
| ユーザー名 | Macなら whoami の結果、Windowsなら whoami の \ 右側 |
| パスワード | OSのログインパスワード |
2. 接続をタップ
初回は「ホスト鍵を信頼しますか?」と聞かれるので信頼を選択します。OSのログインパスワードを入力すれば、ターミナル画面に切り替わってプロンプトが表示されます。
# 試しに動作確認
whoami
hostname
uname -a # Macの場合
Windowsの場合はPowerShellベースのプロンプトになります。
whoami
$PSVersionTable
ここまで来ればモバイルからの接続成功です。
Step 5:公開鍵認証に切り替える(推奨)
パスワード認証はとりあえず動きますが、セキュリティと利便性の両面で公開鍵認証に切り替えるのがおすすめです。
1. SSH Termで鍵を生成
- SSH Termの「鍵管理」画面を開く
- 「鍵を生成」をタップ
- 鍵タイプは Ed25519(デフォルト)
- 生成完了後、「公開鍵をコピー」をタップ
2-A. Macに公開鍵を登録
SSH TermでMacにパスワード認証で接続したまま、以下を実行します。
# .sshディレクトリを準備
mkdir -p ~/.ssh
chmod 700 ~/.ssh
# 公開鍵を貼り付ける(SSH TermのIMEモードでペースト可能)
echo "ssh-ed25519 AAAA...(コピーした公開鍵)" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
2-B. Windowsに公開鍵を登録
Windowsはパスが少し違います。SSH Termでパスワード認証接続中に、PowerShellで以下を実行します。
# .sshディレクトリ作成
New-Item -ItemType Directory -Force -Path "$env:USERPROFILE\.ssh"
# 公開鍵を貼り付け
Add-Content -Path "$env:USERPROFILE\.ssh\authorized_keys" -Value "ssh-ed25519 AAAA...(コピーした公開鍵)"
重要:Windowsの管理者権限ユーザー(Administratorsグループ所属)の場合、authorized_keys の場所は標準と異なります。
# 管理者ユーザーは↓のパスに公開鍵を置く必要がある
C:\ProgramData\ssh\administrators_authorized_keys
PowerShellを管理者権限で開いて、以下を実行します。
Add-Content -Path "C:\ProgramData\ssh\administrators_authorized_keys" -Value "ssh-ed25519 AAAA..."
# 権限を厳しくする(重要:これをやらないと公開鍵認証は動かない)
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"
3. SSH Termで鍵認証接続
SSH Termの接続設定画面に戻り、「認証方式」を「公開鍵」に変更し、生成した鍵を選択します。再接続してパスワードなしでログインできれば成功です。
Step 6:パスワード認証を無効化する(任意)
公開鍵認証で安定して入れることを確認したら、パスワード認証は無効化しておくとセキュリティが一段上がります。
Macの場合
sudo nano /etc/ssh/sshd_config
以下の行を編集します(# を外して no に変更)。
PasswordAuthentication no
保存して再起動します。
sudo launchctl unload /System/Library/LaunchDaemons/ssh.plist
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist
または「システム設定」→「共有」→「リモートログイン」を一度オフ→オンでも反映されます。
Windowsの場合
C:\ProgramData\ssh\sshd_config をメモ帳で開きます(管理者権限で開かないと保存できません)。
PasswordAuthentication no
を有効化して保存し、サービスを再起動します。
Restart-Service sshd
注意:秘密鍵を紛失するとリモートでは入れなくなります。Windowsならローカル画面、Macならローカルログインで復旧できますが、SSH Termに入れた秘密鍵はバックアップ機能でiCloud Drive / Google Driveに退避しておくと安心です。
つまずきやすいポイント
「Connection refused」と出る
SSHサーバーが起動していない可能性が高いです。
- Mac:「システム設定」→「共有」→「リモートログイン」がオンか確認
- Windows:
Get-Service sshdでRunningか確認、停止していたらStart-Service sshd
「Connection timed out」になる
Tailscaleが正しく動いていない可能性があります。
- スマホとPCの両方で
tailscale statusがオンライン表示か - Tailscaleアプリで両デバイスが同じTailnetに表示されるか
- 違うアカウントでログインしていないか(Login Provider違いはハマりがちです)
Tailscale IPは取れているのに繋がらない
PCのファイアウォールがTailscaleからのSSHを通していないことがあります。
- Mac:「システム設定」→「ネットワーク」→「ファイアウォール」がオフか、または
sshdが許可されているか - Windows:
Get-NetFirewallRule -Name *ssh*のEnabledがTrueになっているか
スマホからの接続がすぐ切れる
スマホ側のバッテリー最適化で、SSH TermやTailscaleがバックグラウンドで止められている可能性があります。
- iOS:SSH Termの「設定」→「バックグラウンド維持」をオン
- Android:「設定」→「バッテリー」→ SSH TermとTailscaleの「バッテリー最適化」を無効にする
接続切れの詳細は「スマホのSSH接続が切れる原因と対策」も参照してください。
さらに快適にするTips
1. tmuxを併用する
SSH接続が万一切れても作業を継続できるよう、サーバー側にtmuxを入れて使う習慣をつけると最強です。
# Mac
brew install tmux
# tmuxセッション開始
tmux new -s work
Windowsの場合はWSL2上にtmuxを入れて、SSHでWSLに直接ログインする手もあります。
詳しくは「tmux実践ガイド|SSH×tmuxでリモート開発を劇的に快適にする」をご覧ください。
2. SFTPでファイルを覗く
SSH TermにはSFTPブラウザが内蔵されています。ターミナルとは別タブでリモートのファイルツリーをGUIで開けるので、設定ファイルの確認やログのダウンロードがスマホ単体で完結します。
3. Tailscale SSHを試す
Tailscale自体にTailscale SSHという機能があります。これを有効にするとOpenSSHを使わずTailscaleの認証だけでSSH接続できるようになります。
sudo tailscale up --ssh
公開鍵管理が不要になり、ACL(アクセス制御リスト)でデバイス単位の権限管理もできるようになります。鍵ファイルを管理したくない方にはおすすめです。
詳しくは「TailscaleでClaude CodeにSSH接続する方法」を参照してください。
まとめ
スマホのSSH Termから自宅PCに安全に繋ぐ手順を、MacとWindowsそれぞれ最後まで通しました。
- Tailscaleアカウントを作る
- 自宅PC側のSSHサーバーを有効化+Tailscaleをインストール(Mac/Windowsで手順は別)
- スマホにSSH TermとTailscaleを入れる
- SSH Termでパスワード認証→公開鍵認証へ移行
- 任意でパスワード認証を無効化
ポート開放もDDNSも不要、CGNAT環境でも繋がる。自宅回線のグローバルIPが変わっても何の影響もない——これがTailscaleを使う最大のメリットです。
ぼく自身、薬局からも電車の中からも、毎日この構成で自宅Macに繋いで作業しています。一度組んでしまえば、あとは触ることがほぼないほど安定します。
買い切り800円のSSH TermとTailscale無料プランで、あなたのスマホは「自宅PCのリモコン」になります。