python-3.x SSHException:OpenSSH私钥文件签入不匹配

cqoc49vn  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(167)

我试图从GoogleColab设置一个MySQL示例到远程Linux服务器的SSH隧道连接
服务器管理员要求我们使用ssh密钥而不是用户ssh密码。我的机器上有ssh键,它们可以远程连接到服务器(从我的机器上看,隧道很好,访问mysql也很好)
但是我现在需要的是设置它,这样我就可以使用google colab连接到mysql服务器,不幸的是,当我尝试使用paramiko设置id_rsa密钥时,我得到一个错误:SSHException:OpenSSH私钥文件签入不匹配
id_rsa密钥(私有和公共)被上传到我的google驱动器,这是我在colab中尝试进行设置的方式:

#Import Modules Needed to connect to server and mysql 
!pip install paramiko
import paramiko
from paramiko import SSHClient
import ssl  
!pip install sshtunnel
import sshtunnel
from sshtunnel import SSHTunnelForwarder
!pip install pymysql
import pymysql
import logging

#set up access to drive
from google.colab import drive
#mount google drive
drive.mount('/content/drive/')

#get glob to work with files in drive
import glob
#get the shh key files from drive (private and file with ssh key file)
sshfolder_files = glob.glob('drive/MyDrive/.ssh/*')
for file_path in sshfolder_files:
  if 'pass.txt' in file_path:
    passfile_path = file_path
  if 'id_rsa' in file_path and 'pub' not in file_path:
    id_rsa_path = file_path
#get the pass for the id_rsa private key
passfile = open(passfile_path, "r")
passcode = passfile.read()
#set up the key so it can be used to to the the server
mypkey = paramiko.RSAKey.from_private_key_file(id_rsa_path, passcode) # <-- here I get the error!

错误:

/usr/local/lib/python3.10/dist-packages/paramiko/pkey.py in _read_private_key_openssh(self, lines, password)
    664 
    665         if checkint1 != checkint2:
--> 666             raise SSHException(
    667                 "OpenSSH private key file checkints do not match"
    668             )

SSHException: OpenSSH private key file checkints do not match
tkclm6bt

tkclm6bt1#

该错误似乎引用了一个密码字符串,该字符串与解密id_rsa(私钥)所需的密码不匹配
如果我确保此函数paramiko.RSAKey.from_private_key_file(id_rsa_path, passcode)的密码(第二个参数)与私钥所用的密码完全匹配,则不会产生错误。
由于我是从一个文本文件中阅读密码的,所以我需要非常小心地确保所读取的行只有组成密码的字符,(没有额外的不可见字符),所以如果我用脱衣舞()将处理新的行字符串和空格,并使用像re.sub('\W_','')这样的函数来替换任何非字符串上的字母数字字符应该确保从文件中读取的密码与生成私钥时我使用的密码相匹配(假设只使用了字母数字字符)。

相关问题