-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
301 lines (288 loc) · 19.1 KB
/
Copy pathindex.html
File metadata and controls
301 lines (288 loc) · 19.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
<!DOCTYPE html>
<!-- LAUNCH FLAG: "live" since 2026-07-15 (app approved). "soon" would swap the clickable
"Download on the App Store" links back to "Coming soon" badges. -->
<html lang="en" data-launch="live">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>EasyTunnel — SSH Client, Port Forwarding & SFTP for iPhone</title>
<meta name="description" content="EasyTunnel is an iPhone-first SSH client: forward local ports and browse them in-app (mic & camera work), run a full terminal, manage files over SFTP, and edit code. A one-time $6.99 — no subscription. Now on the App Store." />
<meta name="keywords" content="SSH client iPhone, iOS SSH app, port forwarding iOS, SSH tunnel iPhone, SFTP iPhone, SSH terminal iOS, test localhost on iPhone, getUserMedia localhost iOS, mobile terminal app" />
<meta name="robots" content="index, follow" />
<meta name="author" content="EasyTunnel" />
<meta name="theme-color" content="#060B08" />
<link rel="canonical" href="https://easytunnel.app/" />
<link rel="icon" type="image/png" href="assets/icon.png" />
<link rel="apple-touch-icon" href="assets/icon.png" />
<!-- Open Graph -->
<meta property="og:type" content="website" />
<meta property="og:site_name" content="EasyTunnel" />
<meta property="og:title" content="EasyTunnel — SSH Client, Port Forwarding & SFTP for iPhone" />
<meta property="og:description" content="iPhone SSH client with in-app port forwarding (mic & camera work), a full terminal, SFTP, and a code editor. One-time $6.99, no subscription. Now on the App Store." />
<meta property="og:image" content="https://easytunnel.app/assets/og-image.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:url" content="https://easytunnel.app/" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="EasyTunnel — SSH Client, Port Forwarding & SFTP for iPhone" />
<meta name="twitter:description" content="iPhone SSH client with in-app port forwarding (mic & camera work), a terminal, SFTP, and a code editor. One-time $6.99, no subscription." />
<meta name="twitter:image" content="https://easytunnel.app/assets/og-image.png" />
<!-- Structured data -->
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "EasyTunnel",
"operatingSystem": "iOS 17.0 or later",
"applicationCategory": "DeveloperApplication",
"url": "https://easytunnel.app/",
"image": "https://easytunnel.app/assets/og-image.png",
"description": "An iPhone-first SSH client with local port forwarding you can browse in-app, a full terminal, SFTP file management, and a code editor.",
"featureList": [
"SSH terminal",
"Local port forwarding",
"In-app web browser for forwarded ports",
"SFTP file browser",
"Code editor with syntax highlighting",
"Password, private key and 2FA authentication",
"Host-key pinning",
"Lock Screen Live Activity"
],
"offers": { "@type": "Offer", "price": "6.99", "priceCurrency": "USD" },
"publisher": { "@type": "Organization", "name": "EasyTunnel" }
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "VideoObject",
"name": "EasyTunnel — iPhone SSH client demo",
"description": "A 30-second walkthrough of EasyTunnel on iPhone: connecting over SSH, using the terminal, browsing forwarded ports in the in-app browser, and managing files over SFTP.",
"thumbnailUrl": "https://easytunnel.app/assets/demo/demo-poster.jpg",
"contentUrl": "https://easytunnel.app/assets/demo/demo-hero.mp4",
"uploadDate": "2026-07-08"
}
</script>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": [
{
"@type": "Question",
"name": "Do the microphone and camera work in the in-app browser?",
"acceptedAnswer": { "@type": "Answer", "text": "Yes. When you forward a port and open it at localhost inside EasyTunnel, iOS treats it as genuine loopback — a secure context — so getUserMedia works and the mic and camera turn on, no certificates or third-party tunnels required." }
},
{
"@type": "Question",
"name": "Which SSH authentication methods does EasyTunnel support?",
"acceptedAnswer": { "@type": "Answer", "text": "Password, private keys (ed25519 and ECDSA) with a reusable key library, and keyboard-interactive for 2FA and one-time codes." }
},
{
"@type": "Question",
"name": "Is there a subscription or account?",
"acceptedAnswer": { "@type": "Answer", "text": "No. EasyTunnel is a one-time $6.99 purchase — no subscription and no account. There is no telemetry; credentials are stored in the iOS Keychain and nothing leaves your device." }
},
{
"@type": "Question",
"name": "What iPhone and iOS version do I need?",
"acceptedAnswer": { "@type": "Answer", "text": "EasyTunnel is iPhone-first and runs on iOS 17 or later." }
}
]
}
</script>
<link rel="stylesheet" href="styles.css?v=2" />
</head>
<body>
<a class="skip-link" href="#top">Skip to content</a>
<header class="site-header">
<a class="brand" href="#top" aria-label="EasyTunnel home">
<img src="assets/icon.png" alt="" width="32" height="32" />
<span>EasyTunnel</span>
</a>
<nav aria-label="Primary">
<a href="#features">Features</a>
<a href="#screens">Screens</a>
<a href="#faq">FAQ</a>
<a class="nav-support email" data-user="hello" data-domain="easytunnel.app" data-text="keep" href="#">Support</a>
</nav>
</header>
<main id="top">
<!-- HERO -->
<section class="hero">
<div class="hero-copy">
<div class="pills">
<span class="pill pill-price">$6.99 · one-time</span>
<span class="pill">iPhone · iOS 17+</span>
<span class="pill">No subscription</span>
</div>
<h1>SSH that fits<br />in your pocket.</h1>
<p class="tagline">Simple tunnels. Powerful tools.</p>
<p class="subhead">
Forward local ports and browse them right in the app, run a full terminal,
manage files over SFTP, and edit code — all in one beautifully simple interface.
</p>
<div class="cta-row">
<span class="appstore-badge badge-soon" role="img" aria-label="Coming soon to the App Store">
<svg viewBox="0 0 24 24" width="26" height="26" aria-hidden="true" fill="currentColor">
<path d="M16.365 1.43c0 1.14-.42 2.2-1.24 3.02-.9.9-2.05 1.5-3.2 1.4-.13-1.1.42-2.28 1.2-3.06.86-.86 2.2-1.5 3.24-1.36zM20.9 17.2c-.53 1.23-.78 1.78-1.47 2.87-.96 1.53-2.32 3.44-4 3.45-1.5.02-1.88-.98-3.9-.97-2.02.01-2.44.99-3.94.97-1.68-.02-2.97-1.73-3.93-3.26-2.7-4.28-2.98-9.3-1.32-11.96C3.6 6.5 5.5 5.4 7.28 5.4c1.8 0 2.94 1 4.43 1 1.44 0 2.32-1 4.42-1 1.6 0 3.28.87 4.48 2.37-3.94 2.16-3.3 7.78.29 9.43z"/>
</svg>
<span class="badge-text"><small>Coming soon to the</small><strong>App Store</strong></span>
</span>
<!-- Goes live when data-launch="live". App Store ID 6789007010. -->
<a class="appstore-badge badge-live" href="https://apps.apple.com/app/id6789007010" aria-label="Download EasyTunnel on the App Store">
<svg viewBox="0 0 24 24" width="26" height="26" aria-hidden="true" fill="currentColor">
<path d="M16.365 1.43c0 1.14-.42 2.2-1.24 3.02-.9.9-2.05 1.5-3.2 1.4-.13-1.1.42-2.28 1.2-3.06.86-.86 2.2-1.5 3.24-1.36zM20.9 17.2c-.53 1.23-.78 1.78-1.47 2.87-.96 1.53-2.32 3.44-4 3.45-1.5.02-1.88-.98-3.9-.97-2.02.01-2.44.99-3.94.97-1.68-.02-2.97-1.73-3.93-3.26-2.7-4.28-2.98-9.3-1.32-11.96C3.6 6.5 5.5 5.4 7.28 5.4c1.8 0 2.94 1 4.43 1 1.44 0 2.32-1 4.42-1 1.6 0 3.28.87 4.48 2.37-3.94 2.16-3.3 7.78.29 9.43z"/>
</svg>
<span class="badge-text"><small>Download on the</small><strong>App Store</strong></span>
</a>
</div>
<p class="micro">One-time $6.99 · Private & on-device · No accounts, no subscription.</p>
</div>
<figure class="hero-video">
<video class="hv-wide" autoplay muted loop playsinline preload="auto"
poster="assets/demo/demo-poster.jpg"
aria-label="EasyTunnel demo: connecting over SSH, using the terminal, browsing forwarded ports, and managing files over SFTP on iPhone">
<source src="assets/demo/demo-hero.mp4" type="video/mp4" />
</video>
<video class="hv-tall" autoplay muted loop playsinline preload="auto"
poster="assets/demo/demo-poster-mobile.jpg"
aria-label="EasyTunnel demo on iPhone: SSH terminal, forwarded ports, and SFTP files">
<source src="assets/demo/demo-hero-mobile.mp4" type="video/mp4" />
</video>
</figure>
</section>
<!-- USE CASE -->
<section class="usecase" aria-labelledby="usecase-title">
<div class="usecase-inner">
<div class="usecase-copy">
<span class="eyebrow">Real-world moment</span>
<h2 id="usecase-title">The demo that needs a real phone.</h2>
<p>
You built a web app that records from the mic — or streams the camera. It's flawless
on your laptop. Then the question lands: <em>does it actually work on an iPhone?</em>
</p>
<p>
Normally that means wrestling with tunneling services, self-signed certificates, and
flaky redirects just to point mobile Safari at your dev server — and even then, iOS
won't hand a random public tunnel your microphone.
</p>
<p class="lead">
EasyTunnel makes it a non-event. SSH to the machine running your app, forward its port,
and open <code>localhost:8000</code> right inside EasyTunnel's browser. Because it's
genuine loopback, iOS treats it as a secure context — so <code>getUserMedia</code> just
works. The mic goes live. The camera turns on. Your waveform dances.
</p>
<p class="punch">No certs. No third-party tunnels. No drama. One tap to connect, one tap to browse — and the demo works on the real thing.</p>
</div>
<div class="usecase-visual">
<div class="phone">
<img src="assets/shots/03-web.webp" width="660" height="1435" alt="A forwarded web app open at localhost inside EasyTunnel's in-app browser on iPhone" loading="lazy" />
</div>
</div>
</div>
</section>
<!-- FEATURES -->
<section id="features" class="features" aria-labelledby="features-title">
<div class="section-head">
<span class="eyebrow">Everything in one app</span>
<h2 id="features-title">Built for people who live in the terminal</h2>
</div>
<div class="grid">
<article class="card"><div class="ico">⌨️</div><h3>Full SSH terminal</h3><p>A real interactive terminal with an on-screen key bar for esc, ctrl, and arrows — light or dark, following your theme.</p></article>
<article class="card"><div class="ico">🔀</div><h3>Local port forwarding</h3><p>Set up <code>ssh -L</code> forwards and open several at once. Reach services behind your SSH host as if they were local.</p></article>
<article class="card"><div class="ico">🌐</div><h3>Built-in web view</h3><p>Browse a forwarded web app at <code>localhost</code> without leaving EasyTunnel — camera and microphone work, because loopback is secure.</p></article>
<article class="card"><div class="ico">📁</div><h3>SFTP file browser</h3><p>Browse, upload, download, rename, create folders, and delete remote files. Preview text and images with pinch-to-zoom.</p></article>
<article class="card"><div class="ico">📝</div><h3>Code editor</h3><p>Edit remote files with syntax highlighting and a Markdown preview, then save straight back over SFTP.</p></article>
<article class="card"><div class="ico">🔐</div><h3>Flexible auth</h3><p>Password, private key (ed25519 & ECDSA), or keyboard-interactive for 2FA and one-time codes — with a reusable key library.</p></article>
<article class="card"><div class="ico">🛡️</div><h3>Host-key pinning</h3><p>Trust-on-first-use pins each server's key and warns you if it ever changes — protection against man-in-the-middle attacks.</p></article>
<article class="card"><div class="ico">📲</div><h3>Live Activity</h3><p>Keep an eye on the live session and its forwards right from your Lock Screen and Dynamic Island.</p></article>
</div>
</section>
<!-- SCREENS -->
<section id="screens" class="screens" aria-labelledby="screens-title">
<div class="section-head">
<span class="eyebrow">A closer look</span>
<h2 id="screens-title">Beautifully simple, from every angle</h2>
</div>
<div class="gallery">
<figure><div class="phone"><img src="assets/shots/01-dashboard.webp" width="660" height="1435" alt="EasyTunnel Tunnels dashboard showing saved tunnels and a live session" loading="lazy" /></div><figcaption>Your tunnels at a glance</figcaption></figure>
<figure><div class="phone"><img src="assets/shots/02-terminal.webp" width="660" height="1435" alt="A full SSH terminal session running in EasyTunnel" loading="lazy" /></div><figcaption>A real terminal, light or dark</figcaption></figure>
<figure><div class="phone"><img src="assets/shots/03-web.webp" width="660" height="1435" alt="Forwarded web apps open in EasyTunnel's in-app browser" loading="lazy" /></div><figcaption>Browse forwards — mic & camera work</figcaption></figure>
<figure><div class="phone"><img src="assets/shots/05-auth.webp" width="660" height="1435" alt="Authentication options: password, private key, and keyboard-interactive 2FA" loading="lazy" /></div><figcaption>Password, keys, or 2FA</figcaption></figure>
<figure><div class="phone"><img src="assets/shots/04-sftp.webp" width="660" height="1435" alt="SFTP file browser listing remote files in EasyTunnel" loading="lazy" /></div><figcaption>Manage files over SFTP</figcaption></figure>
<figure><div class="phone"><img src="assets/shots/06-settings.webp" width="660" height="1435" alt="EasyTunnel settings in dark mode" loading="lazy" /></div><figcaption>Tune it your way</figcaption></figure>
<figure><div class="phone"><img src="assets/shots/07-live-activity.webp" width="660" height="1435" alt="EasyTunnel Live Activity showing a connected session on the iPhone Lock Screen" loading="lazy" /></div><figcaption>Live status on your Lock Screen</figcaption></figure>
</div>
</section>
<!-- FAQ -->
<section id="faq" class="faq" aria-labelledby="faq-title">
<div class="section-head">
<span class="eyebrow">Good to know</span>
<h2 id="faq-title">Frequently asked</h2>
</div>
<div class="faq-list">
<details>
<summary>Do the microphone and camera work in the in-app browser?</summary>
<p>Yes. When you forward a port and open it at <code>localhost</code> inside EasyTunnel, iOS treats it as genuine loopback — a secure context — so <code>getUserMedia</code> works and the mic and camera turn on. No certificates, no third-party tunnels.</p>
</details>
<details>
<summary>Which SSH authentication methods are supported?</summary>
<p>Password, private keys (ed25519 & ECDSA) with a reusable key library, and keyboard-interactive for 2FA and one-time codes.</p>
</details>
<details>
<summary>Is there a subscription or account?</summary>
<p>No. EasyTunnel is a one-time <strong>$6.99</strong> purchase — no subscription and no account. There's no telemetry; credentials live in the iOS Keychain and nothing leaves your device.</p>
</details>
<details>
<summary>What iPhone and iOS version do I need?</summary>
<p>EasyTunnel is iPhone-first and runs on iOS 17 or later.</p>
</details>
</div>
</section>
<!-- CLOSING CTA -->
<section class="closing" aria-labelledby="closing-title">
<h2 id="closing-title">One-time. Private. Available now.</h2>
<p>EasyTunnel keeps SSH, port forwarding, and file transfer simple on iPhone — a one-time $6.99, no subscription, no accounts, and nothing leaves your device.</p>
<span class="appstore-badge badge-soon" role="img" aria-label="Coming soon to the App Store">
<svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" fill="currentColor">
<path d="M16.365 1.43c0 1.14-.42 2.2-1.24 3.02-.9.9-2.05 1.5-3.2 1.4-.13-1.1.42-2.28 1.2-3.06.86-.86 2.2-1.5 3.24-1.36zM20.9 17.2c-.53 1.23-.78 1.78-1.47 2.87-.96 1.53-2.32 3.44-4 3.45-1.5.02-1.88-.98-3.9-.97-2.02.01-2.44.99-3.94.97-1.68-.02-2.97-1.73-3.93-3.26-2.7-4.28-2.98-9.3-1.32-11.96C3.6 6.5 5.5 5.4 7.28 5.4c1.8 0 2.94 1 4.43 1 1.44 0 2.32-1 4.42-1 1.6 0 3.28.87 4.48 2.37-3.94 2.16-3.3 7.78.29 9.43z"/>
</svg>
<span class="badge-text"><small>Coming soon to the</small><strong>App Store</strong></span>
</span>
<a class="appstore-badge badge-live" href="https://apps.apple.com/app/id6789007010" aria-label="Download EasyTunnel on the App Store">
<svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" fill="currentColor">
<path d="M16.365 1.43c0 1.14-.42 2.2-1.24 3.02-.9.9-2.05 1.5-3.2 1.4-.13-1.1.42-2.28 1.2-3.06.86-.86 2.2-1.5 3.24-1.36zM20.9 17.2c-.53 1.23-.78 1.78-1.47 2.87-.96 1.53-2.32 3.44-4 3.45-1.5.02-1.88-.98-3.9-.97-2.02.01-2.44.99-3.94.97-1.68-.02-2.97-1.73-3.93-3.26-2.7-4.28-2.98-9.3-1.32-11.96C3.6 6.5 5.5 5.4 7.28 5.4c1.8 0 2.94 1 4.43 1 1.44 0 2.32-1 4.42-1 1.6 0 3.28.87 4.48 2.37-3.94 2.16-3.3 7.78.29 9.43z"/>
</svg>
<span class="badge-text"><small>Download on the</small><strong>App Store</strong></span>
</a>
<p class="closing-support">Questions or feedback? Email <a class="email" data-user="hello" data-domain="easytunnel.app" href="#">us</a>.</p>
</section>
</main>
<footer class="site-footer">
<div class="footer-inner">
<a class="brand" href="#top" aria-label="EasyTunnel home">
<img src="assets/icon.png" alt="" width="26" height="26" />
<span>EasyTunnel</span>
</a>
<nav class="footer-links" aria-label="Footer">
<a href="#features">Features</a>
<a href="#screens">Screens</a>
<a href="#faq">FAQ</a>
<a class="email" data-user="hello" data-domain="easytunnel.app" data-text="keep" href="#">Email</a>
</nav>
</div>
<p class="copyright">© <span id="year">2026</span> EasyTunnel · Simple tunnels. Powerful tools.</p>
</footer>
<script>
document.getElementById('year').textContent = new Date().getFullYear();
// Assemble support email at runtime so bots scraping the static HTML don't harvest it,
// while real users see and can click a normal address.
document.querySelectorAll('.email').forEach(function (a) {
var addr = a.dataset.user + '@' + a.dataset.domain;
a.href = 'mailto:' + addr;
if (a.dataset.text !== 'keep') a.textContent = addr;
});
</script>
</body>
</html>