add SSH for Agents focus topic page + link in Topics section
This commit is contained in:
@@ -3539,6 +3539,12 @@
|
||||
<p>Build and deploy your own ChatGPT-powered AI agent. Full SSH access, no coding, enterprise-grade hosting — deploy in under 5 minutes.</p>
|
||||
<span class="topic-link">Explore →</span>
|
||||
</a>
|
||||
<a href="ssh-for-agents.html" class="topic-card">
|
||||
<div class="topic-badge">Guide</div>
|
||||
<h3>SSH for Agents</h3>
|
||||
<p>Connect, manage, and transfer files to your agent's Linux instance. Encryption keys, file sync, Tmux sessions, and Midnight Commander — everything you need.</p>
|
||||
<span class="topic-link">Explore →</span>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -0,0 +1,309 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<meta name="robots" content="index, follow" />
|
||||
<link rel="canonical" href="https://derez.ai/ssh-for-agents.html" />
|
||||
<title>SSH for AI Agents — Access, Transfer, Manage | Derez.ai</title>
|
||||
<meta name="description" content="Complete guide to SSH access for your AI agent: encryption keys, file sync, Tmux sessions, and Midnight Commander for easy file transfers." />
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://derez.ai/ssh-for-agents.html" />
|
||||
<meta property="og:title" content="SSH for AI Agents — Access, Transfer, Manage | Derez.ai" />
|
||||
<meta property="og:description" content="Complete guide to SSH access for your AI agent: encryption keys, file sync, Tmux sessions, and Midnight Commander." />
|
||||
<meta name="twitter:card" content="summary_large_image" />
|
||||
<meta name="twitter:title" content="SSH for AI Agents — Access, Transfer, Manage | Derez.ai" />
|
||||
<script defer data-domain="derez.ai" src="https://plausible.odoo4projects.com/js/script.file-downloads.outbound-links.tagged-events.js"></script>
|
||||
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link href="https://fonts.googleapis.com/css2?family=Inter:opsz,wght@14..32,400;14..32,500;14..32,600;14..32,700&display=swap" rel="stylesheet" />
|
||||
<style>
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
body {
|
||||
background: #000810;
|
||||
color: #e8e8f0;
|
||||
font-family: 'Inter', sans-serif;
|
||||
line-height: 1.7;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
.container { max-width: 800px; margin: 0 auto; }
|
||||
a { color: #00f5ff; text-decoration: none; }
|
||||
a:hover { text-decoration: underline; }
|
||||
.header { margin-bottom: 48px; }
|
||||
.header h1 { font-size: 2.2rem; font-weight: 700; line-height: 1.2; margin-bottom: 12px; }
|
||||
.header p { font-size: 1.1rem; color: #999; max-width: 600px; }
|
||||
h2 {
|
||||
font-size: 1.4rem;
|
||||
margin: 40px 0 16px;
|
||||
color: #f0f0ff;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
}
|
||||
h2 .chapter-num {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
border-radius: 50%;
|
||||
background: rgba(0,245,255,0.1);
|
||||
border: 1px solid rgba(0,245,255,0.25);
|
||||
color: #00f5ff;
|
||||
font-size: 0.85rem;
|
||||
font-weight: 700;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
h3 { font-size: 1.1rem; margin: 24px 0 10px; color: #f0f0ff; }
|
||||
p { margin-bottom: 16px; color: #c8c8d8; }
|
||||
ul, ol { margin: 0 0 20px 20px; color: #c8c8d8; }
|
||||
li { margin-bottom: 8px; }
|
||||
strong { color: #f0f0ff; }
|
||||
code {
|
||||
background: #010f20;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-size: 0.9em;
|
||||
color: #00f5ff;
|
||||
}
|
||||
pre {
|
||||
background: #010f20;
|
||||
border: 1px solid #001a2e;
|
||||
border-radius: 10px;
|
||||
padding: 16px 20px;
|
||||
margin: 0 0 20px;
|
||||
overflow-x: auto;
|
||||
font-size: 0.85rem;
|
||||
color: #c8f0ff;
|
||||
}
|
||||
pre code {
|
||||
background: none;
|
||||
padding: 0;
|
||||
color: inherit;
|
||||
}
|
||||
.note-box {
|
||||
background: #010f20;
|
||||
border-left: 3px solid #00f5ff;
|
||||
border-radius: 0 10px 10px 0;
|
||||
padding: 16px 20px;
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
.note-box p { margin: 0; color: #c8c8d8; font-size: 0.9rem; }
|
||||
.note-box strong { color: #00f5ff; }
|
||||
.cta-box {
|
||||
background: #010f20;
|
||||
border: 1px solid rgba(0,245,255,0.2);
|
||||
border-radius: 14px;
|
||||
padding: 28px 32px;
|
||||
margin: 32px 0;
|
||||
text-align: center;
|
||||
}
|
||||
.cta-box h3 { font-size: 1.2rem; margin-bottom: 8px; color: #f0f0ff; }
|
||||
.cta-box p { color: #999; margin-bottom: 16px; }
|
||||
.btn {
|
||||
display: inline-block;
|
||||
background: transparent;
|
||||
border: 1px solid #00f5ff;
|
||||
color: #00f5ff;
|
||||
padding: 10px 28px;
|
||||
border-radius: 8px;
|
||||
font-weight: 600;
|
||||
font-size: 0.95rem;
|
||||
transition: all .2s;
|
||||
}
|
||||
.btn:hover { background: rgba(0,245,255,0.1); text-decoration: none; }
|
||||
.back { margin-bottom: 32px; display: inline-block; font-size: 0.9rem; color: #666; }
|
||||
.back:hover { color: #00f5ff; }
|
||||
.toc {
|
||||
background: #010f20;
|
||||
border: 1px solid #001a2e;
|
||||
border-radius: 14px;
|
||||
padding: 24px 28px;
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
.toc h3 { color: #00f5ff; margin-bottom: 12px; font-size: 0.95rem; text-transform: uppercase; letter-spacing: 0.05em; }
|
||||
.toc ol { margin: 0; list-style: none; counter-reset: toc; }
|
||||
.toc ol li { counter-increment: toc; margin-bottom: 6px; }
|
||||
.toc ol li::before { content: counter(toc) ". "; color: #00f5ff; font-weight: 600; }
|
||||
.toc ol li a { color: #c8c8d8; font-size: 0.95rem; }
|
||||
.toc ol li a:hover { color: #00f5ff; }
|
||||
.screenshot-placeholder {
|
||||
background: #001a2e;
|
||||
border: 1px dashed #0a3060;
|
||||
border-radius: 10px;
|
||||
padding: 32px;
|
||||
text-align: center;
|
||||
color: #555;
|
||||
font-size: 0.85rem;
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
@media (max-width: 600px) {
|
||||
body { padding: 24px 16px; }
|
||||
.header h1 { font-size: 1.6rem; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<a class="back" href="https://derez.ai">← Derez.ai Home</a>
|
||||
|
||||
<div class="header">
|
||||
<h1>SSH for AI Agents</h1>
|
||||
<p>Everything you need to connect to, manage, and transfer files to and from your agent's Linux instance. Your agent comes with full SSH access — here's how to make the most of it.</p>
|
||||
</div>
|
||||
|
||||
<div class="toc">
|
||||
<h3>Chapters</h3>
|
||||
<ol>
|
||||
<li><a href="#ch1">Accessing SSH via Encryption Keys</a></li>
|
||||
<li><a href="#ch2">Copying Files In and Out — Derez Sync</a></li>
|
||||
<li><a href="#ch3">Tmux — Persistent Terminal Sessions</a></li>
|
||||
<li><a href="#ch4">Midnight Commander — File Management with a UI</a></li>
|
||||
</ol>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════════════════════════
|
||||
CHAPTER 1
|
||||
═══════════════════════════════════════════════════════════ -->
|
||||
<h2 id="ch1"><span class="chapter-num">1</span> Accessing SSH via Encryption Keys</h2>
|
||||
|
||||
<p>Your Derez.ai agent runs in its own Linux container with full root SSH access. The most secure way to connect is using <strong>SSH key pairs</strong> — a public key stored on the server and a private key kept on your machine.</p>
|
||||
|
||||
<h3>Generate an SSH Key Pair</h3>
|
||||
<p>If you don't already have an SSH key, create one on your local machine:</p>
|
||||
<pre><code>ssh-keygen -t ed25519 -C "my-derez-agent"</code></pre>
|
||||
<p>This creates two files in <code>~/.ssh/</code>:</p>
|
||||
<ul>
|
||||
<li><code>id_ed25519</code> — your private key (never share this)</li>
|
||||
<li><code>id_ed25519.pub</code> — your public key (goes on the server)</li>
|
||||
</ul>
|
||||
|
||||
<h3>Add the Public Key to Your Agent</h3>
|
||||
<p>Copy the content of your public key:</p>
|
||||
<pre><code>cat ~/.ssh/id_ed25519.pub</code></pre>
|
||||
<p>Then open your agent from the <a href="https://app.derez.ai">dashboard</a> and add the key to <code>~/.ssh/authorized_keys</code>:</p>
|
||||
<pre><code>echo "ssh-ed25519 AAAA... your-key" >> ~/.ssh/authorized_keys</code></pre>
|
||||
|
||||
<h3>Connect via SSH</h3>
|
||||
<p>Once the key is in place, connect from your machine:</p>
|
||||
<pre><code>ssh root@<your-agent-ip></code></pre>
|
||||
<p>You're in — root access, full shell, no password required.</p>
|
||||
|
||||
<div class="note-box">
|
||||
<p><strong>Pro Tip:</strong> You can also set or reset your SSH password from the dashboard at any time. The password is pushed securely into the container and works alongside your key-based access.</p>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════════════════════════
|
||||
CHAPTER 2
|
||||
═══════════════════════════════════════════════════════════ -->
|
||||
<h2 id="ch2"><span class="chapter-num">2</span> Copying Files In and Out — Derez Sync</h2>
|
||||
|
||||
<p>Derez.ai agents include a built-in sync mechanism that lets you transfer files between your local machine and your agent's instance without manual SCP or SFTP commands.</p>
|
||||
|
||||
<h3>How It Works</h3>
|
||||
<p>The sync tool uses your existing SSH connection and handles directory structure, permissions, and incremental transfers automatically. It's designed for workflows where you iterate on scripts, configuration files, or data sets locally and push them to the agent.</p>
|
||||
|
||||
<h3>Copy a File to Your Agent</h3>
|
||||
<pre><code>scp /path/to/local/file root@<your-agent-ip>:/root/destination/</code></pre>
|
||||
|
||||
<h3>Copy a File from Your Agent</h3>
|
||||
<pre><code>scp root@<your-agent-ip>:/root/source/file /path/to/local/destination/</code></pre>
|
||||
|
||||
<h3>Sync an Entire Directory</h3>
|
||||
<p>For larger directory trees, use <code>rsync</code> — it only transfers what changed:</p>
|
||||
<pre><code>rsync -avz --progress /local/project/ root@<your-agent-ip>:/root/project/</code></pre>
|
||||
<p>The <code>-a</code> flag preserves permissions and timestamps, <code>-v</code> gives verbose output, and <code>-z</code> compresses data during transfer.</p>
|
||||
|
||||
<div class="note-box">
|
||||
<p><strong>Pro Tip:</strong> Use <code>--delete</code> with rsync if you want the destination to exactly mirror the source (removes files on the agent that don't exist locally). Great for keeping dev environments in sync.</p>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════════════════════════
|
||||
CHAPTER 3
|
||||
═══════════════════════════════════════════════════════════ -->
|
||||
<h2 id="ch3"><span class="chapter-num">3</span> Tmux — Persistent Terminal Sessions</h2>
|
||||
|
||||
<p>Tmux is a terminal multiplexer that keeps your sessions alive even after you disconnect. If you're running long tasks — model fine-tuning, data processing, agent training — Tmux ensures nothing stops when your SSH connection drops.</p>
|
||||
|
||||
<h3>Start a New Tmux Session</h3>
|
||||
<pre><code>tmux new -s my-session</code></pre>
|
||||
<p>This opens a new terminal inside Tmux. Run any command — it keeps running when you disconnect.</p>
|
||||
|
||||
<h3>Detach and Reattach</h3>
|
||||
<p>Press <code>Ctrl+B</code> then <code>D</code> to detach from the session. Your commands keep running on the server. To come back later:</p>
|
||||
<pre><code>tmux attach -t my-session</code></pre>
|
||||
|
||||
<h3>List Active Sessions</h3>
|
||||
<pre><code>tmux list-sessions</code></pre>
|
||||
|
||||
<h3>Kill a Session</h3>
|
||||
<pre><code>tmux kill-session -t my-session</code></pre>
|
||||
|
||||
<h3>Useful Tmux Shortcuts</h3>
|
||||
<ul>
|
||||
<li><strong>Ctrl+B %</strong> — split pane vertically</li>
|
||||
<li><strong>Ctrl+B "</strong> — split pane horizontally</li>
|
||||
<li><strong>Ctrl+B arrow keys</strong> — navigate between panes</li>
|
||||
<li><strong>Ctrl+B C</strong> — create a new window</li>
|
||||
<li><strong>Ctrl+B N / P</strong> — next / previous window</li>
|
||||
</ul>
|
||||
|
||||
<div class="note-box">
|
||||
<p><strong>Pro Tip:</strong> Start your Hermes agent inside a Tmux session. That way your agent stays online even if you close your laptop — reconnect anytime from anywhere.</p>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════════════════════════
|
||||
CHAPTER 4
|
||||
═══════════════════════════════════════════════════════════ -->
|
||||
<h2 id="ch4"><span class="chapter-num">4</span> Midnight Commander — File Management with a UI</h2>
|
||||
|
||||
<p><strong>Midnight Commander (MC)</strong> is a full-screen file manager for the terminal. It gives you a two-panel interface — think Norton Commander — so you can browse, copy, move, and edit files on your agent visually without memorizing shell commands.</p>
|
||||
|
||||
<h3>Install Midnight Commander</h3>
|
||||
<p>If MC isn't already installed on your agent:</p>
|
||||
<pre><code>apt update && apt install mc -y</code></pre>
|
||||
|
||||
<h3>Launch MC</h3>
|
||||
<pre><code>mc</code></pre>
|
||||
<p>You'll see two panels side by side showing your directory structure. Navigate with the arrow keys, select files with <code>Insert</code>, and use the function key menu at the bottom:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>F1</strong> — Help</li>
|
||||
<li><strong>F3</strong> — View file contents</li>
|
||||
<li><strong>F4</strong> — Edit file</li>
|
||||
<li><strong>F5</strong> — Copy file or directory</li>
|
||||
<li><strong>F6</strong> — Move / Rename</li>
|
||||
<li><strong>F7</strong> — Create directory</li>
|
||||
<li><strong>F8</strong> — Delete</li>
|
||||
<li><strong>F10</strong> — Quit</li>
|
||||
</ul>
|
||||
|
||||
<h3>Copy Files Between Panels</h3>
|
||||
<p>This is where MC shines for your agent. Open one panel showing a local directory and the other showing a remote path — or use an SSH filesystem panel:</p>
|
||||
<pre><code># From MC, press Ctrl+F then choose "Shell link"
|
||||
# Enter: sh://root@<your-agent-ip>/root</code></pre>
|
||||
<p>Now you can copy files between your local machine and your agent by selecting them and pressing <strong>F5</strong> — like dragging and dropping, but in the terminal.</p>
|
||||
|
||||
<h3>Built-in Editor</h3>
|
||||
<p>Press <strong>F4</strong> on any file to open MC's built-in editor (<code>mcedit</code>). It supports syntax highlighting, mouse support, and search — perfect for quick config edits on your agent without leaving the terminal.</p>
|
||||
|
||||
<div class="note-box">
|
||||
<p><strong>Pro Tip:</strong> Enable mouse support in MC by pressing <strong>F9</strong> → Options → Display → check "Mouse support". Now you can click to navigate, select files, and press function keys with your mouse — a full GUI feel over SSH.</p>
|
||||
</div>
|
||||
|
||||
<!-- ═══════════════════════════════════════════════════════════
|
||||
CTA
|
||||
═══════════════════════════════════════════════════════════ -->
|
||||
<div class="cta-box">
|
||||
<h3>Deploy Your Agent with Full SSH Access</h3>
|
||||
<p>Every Derez.ai agent gives you root SSH access, file sync, and all the tools you need to manage it your way.</p>
|
||||
<a href="https://derez.ai/#pricing" class="btn">Get Started →</a>
|
||||
</div>
|
||||
|
||||
<p style="margin-top:48px;padding-top:24px;border-top:1px solid #001a2e;font-size:0.85rem;color:#555;">
|
||||
<a href="https://derez.ai" style="color:#00f5ff">Derez.ai</a> — Deploy your AI agent in 5 minutes. · <a href="https://derez.ai/#blog">Blog</a> · <a href="https://derez.ai/#topics">Focus Topics</a>
|
||||
</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user