1
# -*- test-case-name: twisted.conch.test.test_openssh_compat -*-
2
# Copyright (c) 2001-2008 Twisted Matrix Laboratories.
3
# See LICENSE for details.
6
Factory for reading openssh configuration files: public keys, private keys, and
12
from twisted.python import log
13
from twisted.python.util import runAsEffectiveUser
15
from twisted.conch.ssh import keys, factory, common
16
from twisted.conch.openssh_compat import primes
20
class OpenSSHFactory(factory.SSHFactory):
21
dataRoot = '/usr/local/etc'
22
moduliRoot = '/usr/local/etc' # for openbsd which puts moduli in a different
26
def getPublicKeys(self):
28
Return the server public keys.
31
for filename in os.listdir(self.dataRoot):
32
if filename[:9] == 'ssh_host_' and filename[-8:]=='_key.pub':
34
k = keys.Key.fromFile(
35
os.path.join(self.dataRoot, filename))
36
t = common.getNS(k.blob())[0]
39
log.msg('bad public key file %s: %s' % (filename, e))
43
def getPrivateKeys(self):
45
Return the server private keys.
48
for filename in os.listdir(self.dataRoot):
49
if filename[:9] == 'ssh_host_' and filename[-4:]=='_key':
50
fullPath = os.path.join(self.dataRoot, filename)
52
key = keys.Key.fromFile(fullPath)
54
if e.errno == errno.EACCES:
55
# Not allowed, let's switch to root
56
key = runAsEffectiveUser(0, 0, keys.Key.fromFile, fullPath)
57
keyType = keys.objectType(key.keyObject)
58
privateKeys[keyType] = key
62
log.msg('bad private key file %s: %s' % (filename, e))
64
keyType = keys.objectType(key.keyObject)
65
privateKeys[keyType] = key
71
return primes.parseModuliFile(self.moduliRoot+'/moduli')