termal.in

Blog

SSH, terminals and AI agents.

Notes from building Termalin — practical SSH patterns, terminal workflows, and what it takes to let agents operate servers without regretting it.

ai-agentssession-recordingauditsecuritymcp

How to audit and record what an AI agent does on your servers

An agent's summary of its own work is not a record. How to get a real, tamper-evident trail of every command an AI agent runs over SSH — output-only recordings, agent-tagged audit logs, and a live watch grid.

Read the post →

codexmcpai-agentssshtutorial

Connect OpenAI Codex to your servers over SSH — safely

Codex speaks MCP, so it can run commands and manage files on your servers through Termalin — one entry in ~/.codex/config.toml, no key in the agent's hands, per-host policy, every command on the record.

Read the post →

ai-agentsmcpci-cdsshsecuritytutorial

Give an AI agent SSH access in CI/CD — without a key in your secrets

Put a scoped, expiring token in your pipeline instead of a root SSH key. How to let a workflow — or an agent running in CI — reach your servers over Termalin's hosted MCP endpoint: keyless, no desktop running.

Read the post →

mobaxtermsshmigrationtutorial

Leaving MobaXterm: take your sessions and keys to macOS or Linux

Where MobaXterm keeps your bookmarks and keys, how to export them, and how to land the whole setup in a cross-platform client in one evening — plus the one thing worth keeping MobaXterm around for.

Read the post →

sshawsvpscloudtutorial

How to SSH into an EC2 instance or a VPS for the first time

You just spun up a cloud server — here's the clean path in: the right login user, the key-permissions gotcha, the two errors everyone hits, and how to make the connection repeatable.

Read the post →

sshlinuxcomparisontools

Best SSH Clients for Linux in 2026

The honest answer starts with OpenSSH and tmux. When a GUI earns its place: Tabby, Termius, Remmina, WindTerm, Asbru-CM, XPipe and Termalin, compared fairly.

Read the post →

sshwindowscomparisontools

Best SSH Clients for Windows in 2026: 9 Tested

PuTTY, MobaXterm, Windows Terminal, Bitvise, mRemoteNG, WindTerm, Tabby, Termius and Termalin compared honestly, with prices checked September 2026.

Read the post →

sshmacoscomparisontools

Best SSH Clients for macOS in 2026

iTerm2, Warp, Ghostty, Termius, Tabby, Royal TSX, SecureCRT, Core Shell and Termalin on a Mac, plus what actually replaces MobaXterm when you switch.

Read the post →

sshtermiuscomparisontools

9 Termius Alternatives in 2026 (Free and Paid, Tested)

Nine SSH clients we actually tested as Termius replacements: what's free, what syncs, what each is best at. Includes the one we build, judged by the same bar.

Read the post →

sshport-forwardingdatabasetunnelingsecurity

Connect to a database behind a firewall — over an SSH tunnel, without exposing the port

Reach a Postgres or MySQL database on a private subnet without opening 5432 to the internet. The manual ssh -L way, and how Termalin's Connector automates it.

Read the post →

ai-agentsmcpdatabasesecuritytutorial

How to give an AI agent safe access to your database (read-only by default)

Let Claude query your database without handing it the connection string. The pattern: the client holds the credential, the agent gets scoped read-only queries.

Read the post →

claude-codecursormcpdatabasetutorial

Let Claude Code and Cursor query your database (safely) — the MCP setup

A hands-on setup: wire Termalin's Data client into Claude Code or Cursor over MCP to read Postgres, MySQL, Mongo or Redis — read-only, no connection string.

Read the post →

mcpclaudechatgptconnectorsssh

Manage your servers from claude.ai and ChatGPT — no key pasted anywhere

Termalin is a one-URL connector for claude.ai and ChatGPT: sign in, approve once, and the chat can check disk, tail logs and fix configs — audited, revocable.

Read the post →

sshssh-agentssh-keystutorial

ssh-agent and ssh-add, in practice: stop typing your passphrase

The working guide to the SSH agent: start it on Linux, macOS and Windows, load keys with ssh-add, make it automatic, and fix the two errors everyone hits.

Read the post →

rustconcurrencysshengineering

Take it out of the map: keeping a shared session store lock-free during slow work

An SSH client keeps every live session in one shared map behind a lock. Holding it through a slow handshake froze every other session — here's the Rust fix.

Read the post →

sshhomelabself-hostingtutorial

How to SSH into your home NAS or server — from your LAN and from anywhere

The safe way to reach a home NAS or server over SSH: on your own network, from outside without exposing port 22, and letting an AI agent help without your keys.

Read the post →

sshtroubleshootingdebuggingtutorial

How to read ssh -vvv output: the debug lines that actually matter

What -v, -vv and -vvv each add, the phases every SSH connection walks through, and a decoder for the debug lines people search for — packet type 51 and more.

Read the post →

sshbastionsecuritynetworking

What is a jump host? (And how to use one without collecting keys on it)

A jump host is the hardened machine between the internet and a private network. Jump host vs bastion vs gateway, ProxyJump flow, and the mistakes that undo it.

Read the post →

sshgittroubleshootingssh-keys

GitHub & GitLab SSH key not working? The step-by-step fix

SSH key not working with GitHub or GitLab? One test shows if the key is actually broken — then fix the real culprit: agent, wrong key, HTTPS remote, SSO.

Read the post →

sshcheat-sheetproductivitytutorial

The SSH flags you'll actually use (a practical cheat sheet)

The SSH command flags worth memorizing, organized by task — connection basics, -o, forwarding, jump hosts, session control — plus a compact reference table.

Read the post →

sshssh-agentssh-keystutorial

What is the SSH agent, and how does ssh-add work?

The SSH agent unlocks your key once and signs for you so the key never leaves memory. ssh-add, where it lives on each OS, and why the socket needs guarding.

Read the post →

sshsession-recordingawscloudaudit

SSH session recording on EC2 (and other cloud VMs)

Instances are cattle — recordings must outlive the box. SSM Session Manager, EC2 Instance Connect, tlog and client-side recording compared: what each captures.

Read the post →

sshbastionsession-recordingsecurityaudit

How to record and audit SSH sessions on a Linux bastion host

The bastion sees every privileged session — record there. Server-side tlog vs client-side recording, what auditors need, and the keystroke trap to avoid.

Read the post →

sshport-forwardingtunnelingtutorial

SSH reverse tunnels (ssh -R): expose a local port through a remote server

How ssh -R actually works — the listener opens on the remote side. Demoing a dev server, reaching a machine behind NAT, catching webhooks, plus GatewayPorts.

Read the post →

sshscpsftprsynctutorial

scp vs sftp vs rsync: which to use, with examples

Three ways to copy files over SSH, compared: scp for one-shot copies, sftp for browsing and resume, rsync for syncing — plus the gotchas and a summary table.

Read the post →

sshtroubleshootingnetworkingtutorial

SSH connection refused vs timed out: diagnose it in two minutes

The two most common SSH connect failures mean opposite things. How to tell refused from timed out, and the diagnostic sequence that finds the culprit fast.

Read the post →

sshsecuritytroubleshootingtutorial

Host key verification failed: what it means and the right way to fix it

The one SSH warning you shouldn't paste your way around: what host keys protect against, why the warning fires on innocent rebuilds, and how to re-verify.

Read the post →

ai-agentssshsecuritymcpcomparison

Every way to give an AI agent SSH access, ranked by blast radius

Pasted keys, agent forwarding, key-holding MCP servers, scoped credentials, custodians with policy — five approaches ranked by what a compromise costs you.

Read the post →

cursormcpai-agentssshtutorial

Give Cursor's AI agent safe SSH access to your servers

Wire Cursor to your servers through an MCP server in .cursor/mcp.json — no key in the agent's environment, per-host command policy, every command visible live.

Read the post →

sshtroubleshootingssh-keystutorial

SSH permission denied (publickey): a fast, systematic fix

What the error actually means, how to read ssh -vvv, and the usual culprits in order — wrong user, key not offered, authorized_keys, permissions — with fixes.

Read the post →

sshsecurityssh-keystutorial

SSH agent forwarding is convenient and dangerous — and what to use instead

ForwardAgent (ssh -A) lets a remote host borrow your keys — and so can anyone with root there. What it really does, and the safer ways to reach the next hop.

Read the post →

sshbastiontutorialsecurity

ProxyJump: reach servers behind a bastion without copying keys around

The clean way to SSH through a jump host: what ProxyJump (-J) does, why it beats copying your key to the bastion, multi-hop chains, and the ssh_config for it.

Read the post →

mcpai-agentssecuritytutorial

MCP servers, explained: how to give an AI agent tools without handing over your keys

What an MCP server actually is — host, client, tools, transports — and the design choice that decides whether agent access is safe: who holds the credential.

Read the post →

sshai-agentslocal-llmsecurity

How to give a local LLM safe SSH access to your servers

Running a model locally protects your prompts — not your servers. The custodian pattern that lets a local LLM run commands over SSH without ever holding a key.

Read the post →

sshport-forwardingtunnelingtutorial

SSH port forwarding, explained: local, remote and dynamic tunnels

-L, -R and -D without the confusion. One mental model for SSH tunnels, real examples for each, the flags that make them stick, and the gotchas that break them.

Read the post →

sshssh-configproductivitytutorial

The ~/.ssh/config file: stop retyping the same SSH flags

Host aliases, ProxyJump, keepalives, per-host keys and identities — a practical tour of ssh_config, the file that turns long ssh commands into one short word.

Read the post →

sshssh-keyssecuritytutorial

SSH key types in 2026: Ed25519 vs RSA vs ECDSA — which to use

A straight answer on SSH key algorithms — why Ed25519 is the default now, when RSA still matters, what to avoid, and the one command to generate a modern key.

Read the post →

sshsession-recordingsecuritytutorial

How to record SSH sessions — without keylogging yourself

script, asciinema, tlog and client-side recording compared — and why capturing keystrokes instead of output turns your audit trail into a password file.

Read the post →

ai-agentsmcpsshcomparison

SSH clients for AI agents in 2026: the landscape

Termalin, Gumpbox, VibeShell, standalone MCP servers — who does what, how each handles your keys, and which setup fits which workflow. An honest map.

Read the post →

claude-codemcpsshtutorial

How to connect Claude Code to a server over SSH — a hands-on walkthrough

Three steps to let Claude Code run real commands on your VPS through an MCP server — no key in the agent's environment, every action visible live.

Read the post →

puttysshmigrationtutorial

Leaving PuTTY: migrate your sessions, keys and habits without losing anything

Where PuTTY hides your sessions and host keys, how to convert .ppk keys to OpenSSH, and how to land the whole setup in a modern client in one evening.

Read the post →

sshscprsynctutorial

How to move files between two servers — without downloading them to your laptop first

scp -3, rsync, the tar-over-ssh pipe, S3 as a relay, and the GUI way: five ways to copy files server-to-server, and when each one wins.

Read the post →

sshtroubleshootingtutorial

10 common SSH errors and how to fix each one

Connection refused, Permission denied (publickey), Host key verification failed, timeouts — what each SSH error means and the exact commands that fix it.

Read the post →

ai-agentsmcpsshsecurity

How to let an AI agent deploy to your server — without handing it your SSH keys

Paste a private key into an agent's environment and you can never un-share it. A practical pattern — custodian, scope, watch — for giving agents deploy access.

Read the post →

Follow along via RSS.