സാധുവായ ഒരു OPENSSH പ്രൈവറ്റ് കീ ഫയലല്ല

നിങ്ങൾ SSH വഴി WordPress മെയിന്റനൻസ് ഓട്ടോമേറ്റ് ചെയ്യാൻ ശ്രമിക്കുന്നു. നിങ്ങൾക്ക് ഈ എറർ ലഭിക്കുന്നു: SSHException: not a valid OPENSSH private key file.

നിങ്ങൾ നിങ്ങളുടെ കീ ഫയൽ പരിശോധിച്ചു. അത് ശരിയാണെന്ന് തോന്നുന്നു. പ്രശ്നം നിങ്ങളുടെ കീയിലല്ല. പ്രശ്നം ലൈബ്രറിയിലാണ്.

OpenSSH ഫോർമാറ്റിലല്ലാത്ത കീകൾ കാണുമ്പോൾ Paramiko പരാജയപ്പെടുന്നു. ഹോസ്റ്റിംഗ് പ്രൊവൈഡർമാരും ടൂളുകളും പലതരം ഫോർമാറ്റുകൾ ഉപയോഗിക്കുന്നു. Paramiko അവ പലപ്പോഴും നിരസിക്കാറുണ്ട്.

ഏഴ് വ്യത്യസ്ത ഫോർമാറ്റുകൾ കൈകാര്യം ചെയ്യുന്നതിനായി ഞങ്ങൾ ഒരു കംപാറ്റിബിലിറ്റി ലെയർ (compatibility layer) നിർമ്മിച്ചു:

  • OpenSSH പുതിയ ഫോർമാറ്റ്
  • PKCS#1 RSA
  • SEC 1 EC
  • PKCS#8 plain
  • PKCS#8 encrypted
  • Legacy PEM encrypted
  • PuTTY .ppk (v2 and v3)

Paramiko OpenSSH-ഉം PKCS#1-ഉം കൈകാര്യം ചെയ്യുന്നു. എന്നാൽ PKCS#8, .ppk ഫയലുകൾ കൈകാര്യം ചെയ്യുന്നതിൽ ഇത് പരാജയപ്പെടുന്നു. ഉദാഹരണത്തിന്, Sakura Internet PKCS#8 ഉപയോഗിച്ചുള്ള ECDSA നിർമ്മിക്കുന്നു. Paramiko ഇത് ഉടൻ തന്നെ നിരസിക്കുന്നു.

ഞങ്ങളുടെ പരിഹാരം 'detect, normalize, hand-off' എന്ന രീതിയാണ് ഉപയോഗിക്കുന്നത്.

  1. Detect: ഫോർമാറ്റ് കണ്ടെത്താനായി സിസ്റ്റം ആദ്യത്തെ ബൈറ്റുകളും PEM ഹെഡറുകളും പരിശോധിക്കുന്നു.
  2. Normalize: കീ വായിക്കാൻ ഞങ്ങൾ cryptography ലൈബ്രറി ഉപയോഗിക്കുന്നു. തുടർന്ന് അത് OpenSSH-ന് അനുയോജ്യമായ രീതിയിൽ ഒരു PEM ആയി മാറ്റിയെഴുതുന്നു.
  3. Hand-off: Paramiko കീ സ്വീകരിക്കുന്നു. Paramiko-യെ സംബന്ധിച്ചിടത്തോളം, ഇത് എപ്പോഴും സ്റ്റാൻഡേർഡ് OpenSSH ഫോർമാറ്റായിരിക്കും.

PuTTY .ppk ഫയലുകൾക്കായി ഞങ്ങൾ ഒരു കസ്റ്റം പാഴ്സർ (custom parser) എഴുതിയിട്ടുണ്ട്. ഇത് കോഡിന്റെ വലിപ്പം കുറയ്ക്കാൻ സഹായിക്കുന്നു. ബൈനറി സൈസ് വർദ്ധിപ്പിക്കുന്ന അധിക ഡിപെൻഡൻസികൾ (dependencies) ഇത് ഒഴിവാക്കുന്നു.

ഞങ്ങൾ എറർ മെസ്സേജുകളും പരിഹരിച്ചു. അവ്യക്തമായ എററുകൾ സപ്പോർട്ട് ടിക്കറ്റുകൾക്ക് കാരണമാകുന്നു. ഇപ്പോൾ ഒരു പരാജയം സംഭവിക്കുമ്പോൾ ഞങ്ങൾ മൂന്ന് വിവരങ്ങൾ നൽകുന്നു:

  • ഏത് ഫോർമാറ്റാണ് വന്നത്.
  • ഞങ്ങൾ ഏതെല്ലാം ഫോർമാറ്റുകൾ സ്വീകരിക്കുന്നു.
  • അടുത്തതായി നിങ്ങൾ എന്ത് ചെയ്യണം.

ഒരു ലൈബ്രറിക്ക് മുന്നിൽ ഒരു അബ്സോർബിംഗ് ലെയർ (absorbing layer) നിർമ്മിക്കുമ്പോൾ അതിന്റെ പരിമിതികൾ ഇല്ലാതാകുന്നു. ഈ ലെയർ വ്യത്യസ്ത ഫോർമാറ്റുകളെ നിങ്ങളുടെ ആപ്ലിക്കേഷന് ഒരേപോലെ തോന്നിപ്പിക്കുന്നു.

Source: https://dev.to/susumun/not-a-valid-openssh-private-key-file-building-a-compat-layer-for-seven-ssh-private-key-formats-fl8