diff --git a/docs.json b/docs.json index f58cb3bb0..33a5feaed 100644 --- a/docs.json +++ b/docs.json @@ -190,6 +190,7 @@ "pages": [ "pods/connect-to-a-pod", "pods/configuration/use-ssh", + "pods/configuration/ssh-agents", "pods/configuration/connect-to-ide", "pods/configuration/expose-ports", "pods/networking" diff --git a/pods/configuration/ssh-agents.mdx b/pods/configuration/ssh-agents.mdx new file mode 100644 index 000000000..2472200f7 --- /dev/null +++ b/pods/configuration/ssh-agents.mdx @@ -0,0 +1,135 @@ +--- +title: "Connect a coding agent to a Pod" +sidebarTitle: "SSH for agents" +description: "Set up SSH access so coding agents like Claude Code, Codex, and Cursor can connect to your Runpod Pod over a secure shell connection." +--- + +Coding agents like Claude Code, Codex, and Cursor connect to Pods over SSH. This page covers port exposure, confirming the SSH daemon is running, and connecting your agent. + +## Requirements + +You need an SSH key pair added to your Runpod account before starting. See [SSH public keys](/get-started/credentials#ssh-public-keys) for setup instructions. + +## Step 1: Expose TCP port 22 + + + +If you deployed a Pod without port 22, open the Pod's three-dot menu, click **Edit Pod**, add `22` to the **Expose TCP ports** field, and save. Editing a Pod resets it and erases anything stored outside `/workspace` or a network volume. See [Update a Pod](/pods/manage-pods#update-a-pod). + + + +Official Runpod templates already expose port 22, so you can skip this step if you use one. After you deploy, check that port 22 appears under **Direct TCP Ports** in the Pod's **Connect** tab. + +For other templates, there are three ways to add port 22. + +**Edit an existing template:** + +1. Go to [Templates](https://console.runpod.io/user/templates) in the Runpod console. +2. Find your template, click the three-dot menu at the right of its row, and select **Edit template**. +3. In the **Config** tab, expand **Networking configuration** and add `22` to the **Expose TCP ports** field. +4. Click **Save**, then deploy the Pod. + +**Use a community or Hub template that lacks port 22:** + +You can't edit these templates directly. Open the template's three-dot menu and click **Duplicate** to create an editable copy, then follow the preceding steps on the copy. + +**Override ports for one deployment:** + +If you only need port 22 for this specific Pod and don't want to change the template permanently, click **Set overrides** next to the selected template on the Deploy a Pod page. This changes ports for that deployment only and leaves the template unchanged. + +After the Pod starts, open its **Connect** tab and look for **Direct TCP Ports**. You see a mapping like this: + +```text +TCP port 213.173.109.39:13007 -> :22 +``` + +This is the public IP and port your agent uses to connect. + +## Step 2: Confirm the SSH daemon is running + +Official Runpod templates such as Runpod PyTorch and Stable Diffusion start the SSH daemon automatically, so you don't need any extra setup. + +Custom templates require you to start the SSH daemon manually. See [Full SSH via public IP](/pods/configuration/use-ssh#full-ssh-via-public-ip-with-key-authentication) for the Docker start command to add to your template. + +## Step 3: Connect your agent + +### Claude Code + +In this setup, Claude Code runs on the Pod itself. SSH is how you open a terminal session to reach it. Cursor, by contrast, runs locally and connects to the Pod remotely. + +SSH into the Pod using the IP and port from Step 1: + +```bash +ssh root@POD_IP_ADDRESS -p SSH_PORT -i ~/.ssh/id_ed25519 +``` + +Once inside the Pod, install Claude Code using the native installer: + +```bash +curl -fsSL https://claude.ai/install.sh | bash +``` + +Then navigate to your project directory and start Claude Code: + +```bash +claude +``` + +### Cursor + +Cursor runs on your local machine and connects to the Pod over Remote-SSH. Follow [Configure SSH for your IDE](/pods/configuration/connect-to-ide#step-4-configure-ssh-for-your-ide), using the IP and port from Step 1. + +### Codex + +Like Claude Code, Codex runs on the Pod itself in this setup. SSH into the Pod first, then install and run Codex there. + +SSH into the Pod using the IP and port from Step 1: + +```bash +ssh root@POD_IP_ADDRESS -p SSH_PORT -i ~/.ssh/id_ed25519 +``` + +Once inside the Pod, install Codex using the native installer: + +```bash +curl -fsSL https://chatgpt.com/codex/install.sh | sh +``` + +Authenticate and start Codex from your project directory: + +```bash +codex login +codex +``` + +## Troubleshooting + +### Permission denied (publickey) + +See [Troubleshooting SSH key authentication](/pods/configuration/use-ssh#troubleshooting-ssh-key-authentication) for a full list of causes and fixes. + +### Connection refused + +Check that port 22 appears under **Direct TCP Ports** in the Pod's **Connect** tab. If it's missing, add it with **Edit Pod** as described in [Step 1](#step-1-expose-tcp-port-22). Then confirm the SSH daemon is running by opening the [web terminal](/pods/connect-to-a-pod#web-terminal) and running: + +```bash +service ssh status +``` + +### Pod IP address or port changed + +The external port mapping changes whenever a Pod stops and restarts, and Community Cloud Pods may also receive a new IP address. If your agent loses its connection, copy the IP and port again from **Direct TCP Ports** in the Pod's **Connect** tab and reconnect. + +## Next steps + + + + Full reference for basic SSH, full SSH via public IP, and password-based SSH. + + + TCP and HTTP port exposure for Pods. + + + Set up a full IDE connection to your Pod. + +