How to Back Up and Copy PuTTY Sessions Between Windows PCs

Minimal design with two stylized computer monitors and a lightning bolt representing PuTTY sessions, on a pink geometric background, and the text ‘Back Up & Copy PuTTY Settings.’

Moving your saved PuTTY sessions to a new Windows PC takes reg export and reg import against the registry path PuTTY uses for its config. This DevAnswers guide covers the four common scenarios (workstation refresh, laptop swap, multi-machine setup, dead-PC recovery), plus KiTTY conversion and a CVE-2024-31497 security note for anyone still on PuTTY 0.68 through 0.80.

Where PuTTY Stores Its Sessions 

PuTTY keeps every saved session under one Windows Registry key:

HKEY_CURRENT_USER\Software\SimonTatham\PuTTY

Inside that key, the Sessions subkey holds one subkey per saved session. Alongside Sessions, you’ll find SshHostKeys (cached host fingerprints), Jumplist (recent-sessions list), and a few other configuration leaves. Everything lives under HKEY_CURRENT_USER, so the standard backup-and-restore flow does not require administrator rights.

The KiTTY fork (from 9bis.net) is the main exception: it uses HKEY_CURRENT_USER\Software\9bis.com\KiTTY instead, which matters if you’re moving sessions between PuTTY and KiTTY (covered below). Portable builds are another: the PortableApps PuTTY wrapper (and KiTTY’s portable mode) keep their settings in files next to the executable rather than in the registry; official PuTTY itself has no built-in portable mode.

Back Up All PuTTY Settings 

The simplest backup is a single reg export of the whole PuTTY tree. This captures every saved session, all cached SSH host fingerprints, your jump-list of recent sessions, default settings, and UI preferences. It is the recommended path when you’re migrating to a fresh PC and want everything to feel identical.

Open PowerShell and run:

PowerShell
reg export HKCU\Software\SimonTatham\PuTTY putty-full.reg /y

The /y flag overwrites putty-full.reg without prompting if it already exists. The output is a text file (UTF-16 LE) with a Windows Registry Editor Version 5.00 header followed by every key and value under the PuTTY tree.

Prefer a GUI? Open regedit, navigate to HKEY_CURRENT_USER\Software\SimonTatham\PuTTY, right-click the PuTTY key, choose Export, and save the file. The output is identical to what reg export produces.

Back Up Only the Sessions Subkey 

If you only want to move sessions (not host-key fingerprints, jump-list state, or UI preferences), target the Sessions subkey directly:

PowerShell
reg export HKCU\Software\SimonTatham\PuTTY\Sessions putty-sessions.reg /y

This is useful when the destination machine already has its own host-key cache you want to preserve (e.g. on a shared workstation where multiple people have approved different host keys), or when you’re sharing a session list across a team and don’t want to leak your local cache state. The resulting .reg file is typically a few KB even for dozens of sessions.

Import the Sessions on Another PC 

Copy putty-full.reg (or putty-sessions.reg) to the destination machine via USB stick, network share, OneDrive, or any other transfer you trust for ASCII-ish data. Then merge it into the destination’s registry one of two ways.

From PowerShell:

PowerShell
reg import putty-full.reg

Or, in File Explorer, double-click the .reg file and confirm the registry-merge prompt. Both paths produce the same result: each key in the .reg file is created if missing, and any existing key with the same path is overwritten with the imported values. Open PuTTY on the destination machine and your full session list should be there. If you also need to set up SSH key authentication for those sessions, see our guide on PuTTY SSH key authentication on Windows.

If the destination PC already has saved PuTTY sessions, back them up first before importing: reg export HKCU\Software\SimonTatham\PuTTY destination-backup.reg /y. The import will overwrite any session whose name matches a session in your .reg file. The backup lets you restore the destination’s original sessions if needed.

Converting Between PuTTY and KiTTY 

KiTTY’s registry path is HKEY_CURRENT_USER\Software\9bis.com\KiTTY, not SimonTatham\PuTTY. A .reg file exported from PuTTY targets the wrong path for KiTTY, so importing it directly populates nothing visible in KiTTY’s session list. The fix is to edit the .reg file before importing: replace every occurrence of Software\SimonTatham\PuTTY with Software\9bis.com\KiTTY.

The result looks like this:

putty-to-kitty.reg
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\9bis.com\KiTTY\Sessions\production-web]
"HostName"="web01.devanswers.test"
"Protocol"="ssh"
"PortNumber"=dword:00000016
"UserName"="deploy"

Save the edited file (preserve the UTF-16 LE encoding; Notepad will offer the right option in its Save As dialog), then double-click to import or use reg import as in the previous section. Going the other way, from KiTTY to PuTTY, works identically with the paths reversed.

Recovering Sessions from a Dead PC 

If the source PC won’t boot but its drive is still readable (pull it out, mount it as a secondary disk in another Windows machine, or attach it via a USB-to-SATA dock), you can recover PuTTY sessions by loading the dead user’s registry hive offline.

The user-specific registry hive lives at:

[Drive]:\Users\<OldUsername>\NTUSER.DAT

NTUSER.DAT is hidden and a system file; turn on “Show hidden files” and “Show protected operating system files” in Explorer’s View settings if you can’t see it. With the file located, open an elevated PowerShell window (Run as administrator) on the working machine and run:

PowerShell
reg load HKLM\OldUser E:\Users\billy\NTUSER.DAT
reg export HKLM\OldUser\Software\SimonTatham\PuTTY recovered.reg
reg unload HKLM\OldUser
reg load mounts the offline hive under HKLM, not HKCU, so the export path is HKLM\OldUser\Software\SimonTatham\PuTTY. You must run reg unload when you’re finished extracting; without that, the hive stays mounted, the drive file stays open, and you can’t safely detach or reformat the source disk until you reboot.

The resulting recovered.reg file is a normal export. reg export writes the fully-qualified hive name into the file, so the keys you exported appear as HKEY_LOCAL_MACHINE\OldUser\Software\SimonTatham\PuTTY (not HKLM\OldUser\...). Open the file in Notepad and find-and-replace HKEY_LOCAL_MACHINE\OldUser with HKEY_CURRENT_USER, then save (UTF-16 LE), then import into the new machine’s PuTTY just like in the previous section. If the recovered sessions were on KiTTY rather than PuTTY, swap the path to Software\9bis.com\KiTTY instead.

Security Note: PuTTY Versions and CVE-2024-31497 

One detail worth checking before you finish the migration: which PuTTY versions are installed on both ends. CVE-2024-31497, disclosed in April 2024, was a cryptographic flaw in how PuTTY 0.68 through 0.80 generated NIST P-521 ECDSA signatures: the nonce values were biased (the first nine bits were consistently zero), and that bias was enough for an attacker who collected around 60 of your signatures to mathematically reconstruct the corresponding private key.

The fix shipped in PuTTY 0.81 (April 2024); the current stable release as of this writing is PuTTY 0.83 (February 2025). Both ends of your migration should be on 0.81 or later. If you were using NIST P-521 ECDSA keys against any server while running a vulnerable PuTTY version, treat those keys as compromised and rotate them: generate new ones and update authorized_keys on the servers they were used with. The vulnerability was specific to P-521 ECDSA signature generation.

For the full advisory, see PuTTY’s own vuln-p521-bias wishlist entry and CVE-2024-31497 on cve.org. The vulnerability was in signature generation only, so existing servers (where the keys were used to authenticate) were never directly exposed, but any P-521 key used with a vulnerable PuTTY should be considered leaked.

Troubleshooting Common Issues 

A handful of issues come up repeatedly when moving sessions:

  • “Cannot import file” / “Not a valid registry file”. Almost always a file-encoding issue, because manual edits saved as plain UTF-8 from a text editor break the import. Re-save as UTF-16 LE (Notepad’s “Unicode” option). The file’s first line must read Windows Registry Editor Version 5.00.
  • Sessions imported, but key authentication silently fails. Each session stores the absolute path to its .ppk private key. If your username or folder layout differs on the new PC, that path points at nothing: open the imported session’s Connection > SSH > Auth and re-select the private key file, or recreate the same folder structure before importing.
  • Import reports success but PuTTY shows no new sessions. Usually a path mismatch: the .reg file is targeting HKEY_LOCAL_MACHINE\OldUser\... (a dead-PC-recovery export that was never path-corrected back to HKEY_CURRENT_USER) or Software\9bis.com\KiTTY (a KiTTY export imported as-is). Edit the path inside the .reg file and re-import.
  • Sessions appear, but connecting fails with a network error. The sessions imported correctly, but something else is wrong (firewall, host moved, key expired). Our separate guide on PuTTY network errors covers the diagnostic path.

Where to Go from Here 

With the sessions migrated, the natural next steps are: set up SSH key authentication so you’re not retyping passwords, configure the PuTTY shortcut to remember a username (and optionally password) for the sessions you connect to most, and brush up on the broader how-to-connect-to-a-Linux-server-via-SSH walkthrough if you’re new to SSH outside the PuTTY GUI.

Support DevAnswers
Written, tested and maintained by one developer. Your support keeps these guides accurate and ad-light.
Buy me a coffee

9 replies

Leave a reply

  1. Chris

    great guide !
    do you happen to have a small script or bat file that could live in a folder and when I double click it will do the backup/export of the settings ?

    or what would that script look like ?
    cheers !

  2. Mark Berry, MCB Systems

    A helpful reminder one where to find the Putty values. One tip: use a normal, NON-administrative command prompt to export values from the HKEY_CURRENT_USER hive. If like me, you must use a different username to elevate privileges, you’ll be exporting the hive of that user–which in my case was empty. Similarly, import without elevation.

    1. C

      Great tip.

      Just to clarify for other readers: When you run this in a regular (non-admin) command prompt, Windows will pop up a graphical dialog requesting permission to proceed. (Tested in Win 10.)

      In addition to Mark’s point about the identity of the current user, this approach is technically a better security practice than doing things at an admin prompt when not required.

  3. David Ramirez

    For Kitty, the Putty fork, the Windows registry name changes from SimonTatham to 9bis. The rest of the how-to remains the same.

    1. Harry

      Ah. Thanks a lot. Was looking for that.

  4. D DeWitt

    Outstanding guide! Thanks for taking the time to put this together and share it with others!

  5. frank

    I needed info on putty saved session only migration. worked a treat. Thank you!

  6. Jim Crowley

    I hope you can help….I have been using version .53b for quite some time. However I recently had to download version 73 for use on a Linux server which needed specific puTTY settings. So both versions are now running on my laptop. I also have all sessions running on both versions. HOWEVER…on .53b, using the more command. the file contents are simply displayed on the screen, I press ‘Enter’ and I am returned to the UNIX prompt leaving the file contents displayed. On .73, I connect to same server, type same ‘more’ command for same small file, first the screen is cleared, contents are displayed, I press ‘Enter’, then screen is cleared again and I am returned to UNIX prompt, but contents are not visible anymore.
    Just the ‘more’ command syntax I typed. Which setting within .73 controls that?
    Or can I transfer all .53b settings over to .73 version?

    1. Robin Holt

      I think this is probably an artifact of the TERMCAP entry, but I am not sure. If you connect with both and do an ‘echo $TERM’ do they match? If not, can you set the .73 connection to the same as the .53b and see if that makes the problem better. ie: ‘export TERM=xterm’ or whatever the .53b version has.

      In either case, your version of more might actually be using less under the hood. You can control both of their behavior about clearing the terminal on exit using “export LESS=’-X'” in your .bashrc or whatever login profile you use. There are some other behaviors to more and less you might want to read the man pages for each and see what additional default options you want.

      Bottom line, if the termcap entry is sufficient for you, you can control that using the putty settings, but I don’t know exactly how for the .53b version