@@ -118,8 +118,10 @@ def __init__(self, host, user, passwd=None, private_key=None, port=22, proxy_hos
118
118
private_key_obj = StringIO ()
119
119
if os .path .isfile (private_key ):
120
120
pkfile = open (private_key )
121
+ self .private_key = ""
121
122
for line in pkfile .readlines ():
122
123
private_key_obj .write (line )
124
+ self .private_key += line
123
125
pkfile .close ()
124
126
else :
125
127
# Avoid windows line endings
@@ -128,18 +130,31 @@ def __init__(self, host, user, passwd=None, private_key=None, port=22, proxy_hos
128
130
if not private_key .endswith ("\n " ):
129
131
private_key += "\n "
130
132
private_key_obj .write (private_key )
133
+ self .private_key = private_key
131
134
132
- self .private_key = private_key
133
- private_key_obj .seek (0 )
135
+ self .private_key_obj = self ._load_private_key (private_key_obj )
134
136
135
- if "BEGIN RSA PRIVATE KEY" in private_key :
136
- self .private_key_obj = paramiko .RSAKey .from_private_key (private_key_obj )
137
- elif "BEGIN DSA PRIVATE KEY" in private_key :
138
- self .private_key_obj = paramiko .DSSKey .from_private_key (private_key_obj )
139
- elif "BEGIN EC PRIVATE KEY" in private_key :
140
- self .private_key_obj = paramiko .ECDSAKey .from_private_key (private_key_obj )
141
- elif "BEGIN OPENSSH PRIVATE KEY" in private_key :
142
- self .private_key_obj = paramiko .Ed25519Key .from_private_key (private_key_obj )
137
+ @staticmethod
138
+ def _load_private_key (private_key_obj ):
139
+ """ Load a private key from a file-like object"""
140
+ private_key_obj .seek (0 )
141
+ try :
142
+ return paramiko .RSAKey .from_private_key (private_key_obj )
143
+ except Exception :
144
+ private_key_obj .seek (0 )
145
+ try :
146
+ return paramiko .DSSKey .from_private_key (private_key_obj )
147
+ except Exception :
148
+ private_key_obj .seek (0 )
149
+ try :
150
+ return paramiko .ECDSAKey .from_private_key (private_key_obj )
151
+ except Exception :
152
+ private_key_obj .seek (0 )
153
+ try :
154
+ return paramiko .Ed25519Key .from_private_key (private_key_obj )
155
+ except Exception :
156
+ private_key_obj .seek (0 )
157
+ raise Exception ("Invalid private key" )
143
158
144
159
def __del__ (self ):
145
160
self .close ()
0 commit comments