3
3
from twisted .conch .checkers import SSHPublicKeyDatabase
4
4
from twisted .conch .manhole import Manhole
5
5
from twisted .conch .manhole_ssh import TerminalRealm , ConchFactory
6
+ from twisted .conch .openssh_compat .factory import OpenSSHFactory
6
7
from twisted .internet import reactor
7
8
from twisted .application .internet import TCPServer
8
9
9
10
from carbon .protocols import CarbonServerProtocol
10
11
from carbon .conf import settings
12
+ import carbon
11
13
14
+ from carbon .exceptions import CarbonConfigException
12
15
13
- namespace = {}
16
+ namespace = {'carbon' : carbon }
14
17
15
18
16
19
class PublicKeyChecker (SSHPublicKeyDatabase ):
@@ -31,16 +34,27 @@ def createManholeListener():
31
34
32
35
if settings .MANHOLE_PUBLIC_KEY == 'None' :
33
36
credChecker = checkers .InMemoryUsernamePasswordDatabaseDontUse ()
34
- credChecker .addUser (settings .MANHOLE_USER , '' )
37
+ credChecker .addUser (settings .MANHOLE_USER .encode ('utf-8' ),
38
+ '' .encode ('utf-8' ))
35
39
else :
36
40
userKeys = {
37
- settings .MANHOLE_USER : settings .MANHOLE_PUBLIC_KEY ,
41
+ settings .MANHOLE_USER .encode ('utf-8' ):
42
+ settings .MANHOLE_PUBLIC_KEY .encode ('utf-8' ),
38
43
}
39
44
credChecker = PublicKeyChecker (userKeys )
40
45
41
46
sshPortal = portal .Portal (sshRealm )
42
47
sshPortal .registerChecker (credChecker )
43
48
sessionFactory = ConchFactory (sshPortal )
49
+
50
+ # set ssh host keys
51
+ if settings .MANHOLE_HOST_KEY_DIR == "" :
52
+ raise CarbonConfigException ("MANHOLE_HOST_KEY_DIR not defined" )
53
+ openSSHFactory = OpenSSHFactory ()
54
+ openSSHFactory .dataRoot = settings .MANHOLE_HOST_KEY_DIR
55
+ sessionFactory .publicKeys = openSSHFactory .getPublicKeys ()
56
+ sessionFactory .privateKeys = openSSHFactory .getPrivateKeys ()
57
+
44
58
return sessionFactory
45
59
46
60
0 commit comments