fix!: use names not IDs for agent SSH key seed (#17258)

Changes the SSH host key seeding to use the owner username, workspace name, and agent name. This prevents SSH from complaining about a mismatched host key if you use Coder Desktop to connect, and delete and recreate your workspace with the same name. Previously this would generate a different key because the workspace ID changed.

We also include the owner's username in anticipation of using Coder Desktop to access shared workspaces (or as a superuser) down the road, so that workspaces with the same name owned by different users will not have the same key.

This change is **BREAKING** in a limited sense that early access users of Coder Desktop will see their SSH clients complain about host keys changing the first time each workspace is rebuilt with this code. It can be resolved by clearing your `.ssh/known_hosts` file of the Coder workspaces you access this way.
This commit is contained in:
Spike Curtis
2025-04-04 12:51:46 +04:00
committed by GitHub
parent 3a0e8ddf97
commit f6bf6c6ec4
2 changed files with 28 additions and 6 deletions

View File

@ -479,6 +479,9 @@ func TestSSH(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
defer cancel()
user, err := client.User(ctx, codersdk.Me)
require.NoError(t, err)
inv, root := clitest.New(t, "ssh", "--stdio", workspace.Name)
clitest.SetupConfig(t, client, root)
inv.Stdin = clientOutput
@ -490,7 +493,7 @@ func TestSSH(t *testing.T) {
assert.NoError(t, err)
})
keySeed, err := agent.WorkspaceKeySeed(workspace.ID, "dev")
keySeed, err := agent.SSHKeySeed(user.Username, workspace.Name, "dev")
assert.NoError(t, err)
signer, err := agentssh.CoderSigner(keySeed)