PuTTyセッションリストをエクスポート/インポートする方法


678

これを行う方法はありますか?

または、レジストリからすべてのレコードを手動で取得する必要がありますか?

回答:


1238

書き出す

cmd.exe、昇格したプロンプトが必要です

セッションのみ:

regedit /e "%USERPROFILE%\Desktop\putty-sessions.reg" HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions

すべての設定:

regedit /e "%USERPROFILE%\Desktop\putty.reg" HKEY_CURRENT_USER\Software\SimonTatham

パワーシェル:

セッションのみ:

reg export HKCU\Software\SimonTatham\PuTTY\Sessions ([Environment]::GetFolderPath("Desktop") + "\putty-sessions.reg")

すべての設定:

reg export HKCU\Software\SimonTatham ([Environment]::GetFolderPath("Desktop") + "\putty.reg")

インポート

*.regファイルをダブルクリックして、インポートを受け入れます。

別の方法:

cmd.exe、管理者特権のコマンドプロンプトが必要です

regedit /i putty-sessions.reg
regedit /i putty.reg

パワーシェル:

reg import putty-sessions.reg
reg import putty.reg

:ユーザー名に置き換えない SimonTathamでください。

reg現在のユーザーのデスクトップにファイルが作成されます。

:関連するSSHキーエクスポートされません


3
@NamGVUパスにスペースのあるフォルダがあるためです。それを持っていなかったものに移動します。
m0nhawk 2015年

3
@NamGVU%userprofile%をユーザー名に置き換えないでください。そのままにしておきます。
Asrar 2015

4
別のマシンの別のパテにどのようにインポートしますか?
ピート

4
わかりました。ダブルクリックしてください...
ピート・

7
Windows 7では2番目のコマンドが機能しましたが、CMDを管理者として実行する必要がありました。
Humble Rat

46

他の解決策を試したところ、このエラーが発生しました。

Registry editing has been disabled by your administrator.

それにPhooey、私は言います!

PuTTY設定をエクスポートおよびインポートするための以下のPowerShellスクリプトをまとめました。エクスポートされたファイルはWindowsの.regファイルであり、権限がある場合は問題なくインポートされます。それ以外の場合は、import.ps1を使用してファイルをロードします。

警告:このようにレジストリをいじることはBad Idea™であり、私が何をしているのか本当にわかりません。自己責任で以下のスクリプトを使用し、IT部門にマシンのイメージを再作成して、自分が何をしていたかについて不快な質問をする準備をしてください。

ソースマシン:

.\export.ps1

ターゲットマシン:

.\import.ps1 > cmd.ps1
# Examine cmd.ps1 to ensure it doesn't do anything nasty
.\cmd.ps1

export.ps1

# All settings
$registry_path = "HKCU:\Software\SimonTatham"
# Only sessions
#$registry_path = "HKCU:\Software\SimonTatham\PuTTY\Sessions"
$output_file = "putty.reg"

$registry = ls "$registry_path" -Recurse

"Windows Registry Editor Version 5.00" | Out-File putty.reg
"" | Out-File putty.reg -Append

foreach ($reg in $registry) {
  "[$reg]" | Out-File putty.reg -Append
  foreach ($prop in $reg.property) {
    $propval = $reg.GetValue($prop)
    if ("".GetType().Equals($propval.GetType())) {
      '"' + "$prop" + '"' + "=" + '"' + "$propval" + '"' | Out-File putty.reg -Append
    } elseif ($propval -is [int]) {
      $hex = "{0:x8}" -f $propval
      '"' + "$prop" + '"' + "=dword:" + $hex | Out-File putty.reg -Append
    }
  }
  "" | Out-File putty.reg -Append
}

import.ps1

$input_file = "putty.reg"

$content = Get-Content "$input_file"

"Push-Location"
"cd HKCU:\"

foreach ($line in $content) { 
  If ($line.StartsWith("Windows Registry Editor")) {
    # Ignore the header
  } ElseIf ($line.startswith("[")) {
    $section = $line.Trim().Trim('[', ']')
    'New-Item -Path "' + $section + '" -Force' | %{ $_ -replace 'HKEY_CURRENT_USER\\', '' }
  } ElseIf ($line.startswith('"')) {
    $linesplit = $line.split('=', 2)
    $key = $linesplit[0].Trim('"')
    if ($linesplit[1].StartsWith('"')) {
      $value = $linesplit[1].Trim().Trim('"')
    } ElseIf ($linesplit[1].StartsWith('dword:')) {
      $value = [Int32]('0x' + $linesplit[1].Trim().Split(':', 2)[1])
      'New-ItemProperty "' + $section + '" "' + $key + '" -PropertyType dword -Force' | %{ $_ -replace 'HKEY_CURRENT_USER\\', '' }
    } Else {
      Write-Host "Error: unknown property type: $linesplit[1]"
      exit
    }
    'Set-ItemProperty -Path "' + $section + '" -Name "' + $key + '" -Value "' + $value + '"' | %{ $_ -replace 'HKEY_CURRENT_USER\\', '' }
  }
}

"Pop-Location"

非慣用的なコードについてお詫びします。Powershellについてはあまり詳しくありません。改善は大歓迎です!


3
完璧に機能し、時間の節約になりました。1つの追加...パーミッションを設定するには、ここの指示に従う必要がありました:stackoverflow.com/questions/4037939/…
Jacob Zwiers

1
とても助かりました!私は異なるレジストリの場所に両方のパスを編集する必要がありました、それはそれでした:)
SidJ

待って、PowerShellはグループポリシーを回避しますか?それがパッチされるまでどれくらいかかるのだろう
Quolonelの質問

確かではありませんが、私たちは4年で数えています;)
dwurf

私は私のために働いてみませんでした。
ヴェルムルガン

44
  1. 実行を起動し、[開く]ドロップダウンウィンドウに次のように入力します。regedit

  2. ウィンドウのエクスプローラと同様に、
    HKEY_CURRENT_USER \ Software \ SimonTathamに移動します。

  3. 'SimonTatham'キー(ディレクトリアイコン)を右クリックし、[エクスポート]を選択
    します
  4. レジストリエディターを閉じます。

できました。


34

で設定をインポートしたい場合PuTTY Portableは、putty.regファイルを使用でき ます。

このパスに置くだけ[path_to_Your_portable_apps]PuTTYPortable\Data\settings\putty.regです。プログラムはそれをインポートします


23

オフラインのレジストリファイルからPuttyをインポートする必要がある場合、たとえば、クラッシュしたシステムから回復する場合、または単に新しいマシンに移動してその古いドライブからデータを取得する場合、言及する価値のあるもう1つの解決策があります。

http://www.nirsoft.net/utils/registry_file_offline_export.html

このすばらしい無料のコンソールアプリケーションは、レジストリ全体または特定のレジストリキーのみをエクスポートします。私の場合、古いドライブからエクスポーターツールと同じディレクトリにレジストリファイルを単にコピーし、管理者として実行されているCMDウィンドウで次のコマンドと構文を使用しました。

RegFileExport.exe NTUSER.DAT putty.reg "HKEY_CURRENT_USER \ Software \ SimonTatham"

.regファイルをインポートしてPuttyを起動すると、すべてがそこにありました。シンプルで効率的。


2
この回答は、オフライン回復のための別の質問に含まれるほど十分に狭いユースケースです。ありがとう。
フランクフィリップス

4
NTUSER.DATはWindows / SYSTEM32 / Configではなく、保護されたシステムファイルとしてUsers / [Username]にあるというメモを追加します。
フランクフィリップス

13

これは、上記の説明よりもレジストリエクスポートのインポートがはるかに簡単でした。+単に:

  1. ファイルを右クリックして
  2. 「マージ」を選択します

Win 7 Proのチャンピオンのように働きました。


2
また、Windows 10上で私のために働いた

3
私は確認できます-Win10では問題なく動作します。これまでで最も簡単な「インポート」。ありがとう!
d-wade 2016年

12

レジストリをいじりたくない人のために、ファイルに保存するパテのバリエーションが作成されました。ここにあります:http : //jakub.kotrla.net/putty/

パテチームがメインディストリビューションのオプションとしてこれを採用するとよいでしょう。


10

例:
あるユーザーアカウントから別のユーザーアカウントにパテ構成とセッション構成を転送する方法(たとえば、新しいアカウントを作成し、古いアカウントのパテセッション/構成を使用したい場合)

プロセス:
-レジストリキーを古いアカウント
からファイルにエクスポートする-レジストリキーをファイルから新しいアカウントにインポートする

登録キーのエクスポート:( 古いアカウントから)

  1. OLDアカウントにログインします(例:tomold)
  2. 通常の「コマンドプロンプト」を開きます(管理者ではありません!)
  3. 「regedit」と入力します
  4. 構成が保存されているレジストリセクション([HKEY_CURRENT_USER \ SOFTWARE \ SimonTatham]など)に移動してクリックします
  5. ファイルメニューから[エクスポート]を選択するか、マウスを右クリックします(ラジオコントロールの[選択したブランチ])
  6. ファイルに保存して、たとえば「puttyconfig.reg」という名前を付けます。
  7. もう一度ログアウト

登録キーをインポート:( 新しいアカウントに)

  1. トムなどの新しいアカウントにログインします

  2. 通常の「コマンドプロンプト」を開きます(管理者ではありません!)

  3. 「regedit」と入力します

  4. メニューから「インポート」を選択します

  5. インポートするレジストリファイルを選択します(例: 'puttyconfig.reg')

  6. できた

注:
設定は「[HKEY_CURRENT_USER ...]」の下にあり、regeditはadminとして実行され、ユーザーが転送するユーザーではなく、admin-userにそのセクションを表示するため、「adminコマンドプロンプト」を使用しないでください。に。


9

データをにインポートするbumerangのソリューションの改善PuTTY portable

putty.reg(m0nhawkソリューションを使用して)エクスポートしたものを単にに移動するだけでPuTTYPortable\Data\settings\は機能しませんでした。PuTTY Portableがファイルをバックアップし、新しい空のファイルを作成します。

この問題を回避putty.regするには、移行する構成を手動でコピーして、エクスポートさputty.regれた構成から新しく作成されたPuTTYPortable\Data\settings\putty.reg以下の行にコピーします。

REGEDIT4

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY]
"RandSeedFile"="D:\\Programme\\PuTTYPortable\\Data\\settings\\PUTTY.RND"

8

@ m0nhawkによって投稿された回答は、Windows 7マシンでテストしたときに機能しないようです。代わりに、次のスクリプトを使用すると、パテの設定がエクスポート/インポートされます。

::export
@echo off
set regfile=putty.reg
pushd %~dp0

reg export HKCU\Software\SimonTatham %regfile% /y

popd

-

::import
@echo off
pushd %~dp0
set regfile=putty.reg

if exist %regfile% reg import %regfile%

popd

7

m0nhawkの答えはWindows 10では機能しませんでした-管理者特権のコマンドプロンプトが必要で、ファイルの出力を拒否しました。

これは機能し、昇格を必要としませんでした:

reg export HKEY_CURRENT_USER\Software\SimonTatham\PuTTY putty.reg



3

ratil.life/first-useful-powershell-script-putty-to-ssh-configには、セッションをで使用できる形式に変換できるPowerShellスクリプトがあります.ssh/configGitHubにもあります

この抜粋には、コードの主要部分が含まれており、結果の構成を直接stdoutに出力します。

# Registry path to PuTTY configured profiles
$regPath = 'HKCU:\SOFTWARE\SimonTatham\PuTTY\Sessions'

# Iterate over each PuTTY profile
Get-ChildItem $regPath -Name | ForEach-Object {

    # Check if SSH config
    if (((Get-ItemProperty -Path "$regPath\$_").Protocol) -eq 'ssh') {
        # Write the Host for easy SSH use
        $host_nospace = $_.replace('%20', $SpaceChar)
        $hostLine =  "Host $host_nospace"

        # Parse Hostname for special use cases (Bastion) to create SSH hostname
        $puttyHostname = (Get-ItemProperty -Path "$regPath\$_").HostName
        if ($puttyHostname -like '*@*') {
            $sshHostname = $puttyHostname.split("@")[-1]
            }
        else { $sshHostname = $puttyHostname }
        $hostnameLine = "`tHostName $sshHostname"   

        # Parse Hostname for special cases (Bastion) to create User
        if ($puttyHostname -like '*@*') {
            $sshUser = $puttyHostname.split("@")[0..($puttyHostname.split('@').length - 2)] -join '@'
            }
        else { $sshHostname = $puttyHostname }
        $userLine = "`tUser $sshUser"   

        # Parse for Identity File
        $puttyKeyfile = (Get-ItemProperty -Path "$regPath\$_").PublicKeyFile
        if ($puttyKeyfile) { 
            $sshKeyfile = $puttyKeyfile.replace('\', '/')
            if ($prefix) { $sshKeyfile = $sshKeyfile.replace('C:', $prefix) }
            $identityLine = "`tIdentityFile $sshKeyfile"
            }

        # Parse Configured Tunnels
        $puttyTunnels = (Get-ItemProperty -Path "$regPath\$_").PortForwardings
        if ($puttyTunnels) {
            $puttyTunnels.split() | ForEach-Object {

                # First character denotes tunnel type
                $tunnelType = $_.Substring(0,1)
                # Digits follow tunnel type is local port
                $tunnelPort = $_ -match '\d*\d(?==)' | Foreach {$Matches[0]}
                # Text after '=' is the tunnel destination
                $tunnelDest = $_.split('=')[1]

                if ($tunnelType -eq 'D') {
                    $tunnelLine = "`tDynamicForward $tunnelPort $tunnelDest"
                }

                ElseIf ($tunnelType -eq 'R') {
                    $tunnelLine = "`tRemoteForward $tunnelPort $tunnelDest"
                }

                ElseIf ($tunnelType -eq 'L') {
                    $tunnelLine = "`tLocalForward $tunnelPort $tunnelDest"
                }

            }

        # Parse if Forward Agent is required
        $puttyAgent = (Get-ItemProperty -Path "$regPath\$_").AgentFwd
        if ($puttyAgent -eq 1) { $agentLine = "`tForwardAgent yes" }

        # Parse if non-default port
        $puttyPort = (Get-ItemProperty -Path "$regPath\$_").PortNumber
        if (-Not $puttyPort -eq 22) { $PortLine = "`tPort $puttyPort" }

        }

        # Build output string
        $output = "$hostLine`n$hostnameLine`n$userLine`n$identityLine`n$tunnelLine`n$agentLine`n"

        # Output to file if set, otherwise STDOUT
        if ($outfile) { $output | Out-File $outfile -Append}
        else { Write-Host $output }
    }

}

2

私と同じように、新しいWindowsをインストールし、パテセッションについて覚えたでなければ、古いWindowsハードドライブまたは少なくとも古い「ホーム」ディレクトリをバックアップしていれば、それらをインポートできます(C:\Users\<user_name>)。

このディレクトリにはNTUSER.DATファイルがあるはずです。デフォルトでは非表示になっているため、Windowsエクスプローラーで非表示のファイルを有効にするか、別のファイルブラウザーを使用する必要があります。このファイルには、HKEY_CURRENT_USER古いWindowsレジストリのブランチが含まれています。

それを使用するには、regedit新しいウィンドウで開き、HKEY_USERSキーを選択する必要があります。

次にFile-> Load Hive...を選択し、古いWindowsインストールの古い「ホーム」ディレクトリを見つけます。このディレクトリにはNTUSER.DATファイルがあるはずです。デフォルトでは非表示になっているため、Windowsエクスプローラのプロパティで非表示のファイルを表示するように設定していない場合は、File name[ハイブのロード]ダイアログの入力ボックスにファイル名を手動で入力してを押すだけEnterです。次に、次のダイアログウィンドウで、古いレジストリをロードするためのキー名を入力します。例えばtmp

これで、古いレジストリのブランチは、現在のレジストリのブランチからHKEY_CURRENT_USERアクセスできるはずHKEY_USERS\tmpです。

次にHKEY_USERS\tmp\Software\SimonTathamブランチをputty.regファイルにエクスポートし、このファイルをお気に入りのテキストエディターで開いて、すべてのHKEY_USERS\tmp文字列をで置き換えますHKEY_CURRENT_USER.regファイルを保存します。

これで、このファイルをダブルクリックして、現在のWindowsレジストリにインポートできます。これを行う方法については、m0nhawkの回答を参照してください。

最後HKEY_USERS\tmpに、レジストリエディタでブランチを選択し、次にFile-> Unload Hive...を選択して、この操作を確認します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.