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:
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:
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:
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.
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:
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:
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.
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
.ppkprivate 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
.regfile is targetingHKEY_LOCAL_MACHINE\OldUser\...(a dead-PC-recovery export that was never path-corrected back toHKEY_CURRENT_USER) orSoftware\9bis.com\KiTTY(a KiTTY export imported as-is). Edit the path inside the.regfile 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.
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 !
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.
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.
For Kitty, the Putty fork, the Windows registry name changes from SimonTatham to 9bis. The rest of the how-to remains the same.
Ah. Thanks a lot. Was looking for that.
Outstanding guide! Thanks for taking the time to put this together and share it with others!
I needed info on putty saved session only migration. worked a treat. Thank you!
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?
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