123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
-
- #
- from twisted.conch.ssh.transport import SSHClientTransport, SSHCiphers
- from twisted.python import usage
- from twisted.python.compat import unicode
-
- import sys
-
- class ConchOptions(usage.Options):
-
- optParameters = [['user', 'l', None, 'Log in using this user name.'],
- ['identity', 'i', None],
- ['ciphers', 'c', None],
- ['macs', 'm', None],
- ['port', 'p', None, 'Connect to this port. Server must be on the same port.'],
- ['option', 'o', None, 'Ignored OpenSSH options'],
- ['host-key-algorithms', '', None],
- ['known-hosts', '', None, 'File to check for host keys'],
- ['user-authentications', '', None, 'Types of user authentications to use.'],
- ['logfile', '', None, 'File to log to, or - for stdout'],
- ]
-
- optFlags = [['version', 'V', 'Display version number only.'],
- ['compress', 'C', 'Enable compression.'],
- ['log', 'v', 'Enable logging (defaults to stderr)'],
- ['nox11', 'x', 'Disable X11 connection forwarding (default)'],
- ['agent', 'A', 'Enable authentication agent forwarding'],
- ['noagent', 'a', 'Disable authentication agent forwarding (default)'],
- ['reconnect', 'r', 'Reconnect to the server if the connection is lost.'],
- ]
-
- compData = usage.Completions(
- mutuallyExclusive=[("agent", "noagent")],
- optActions={
- "user": usage.CompleteUsernames(),
- "ciphers": usage.CompleteMultiList(
- SSHCiphers.cipherMap.keys(),
- descr='ciphers to choose from'),
- "macs": usage.CompleteMultiList(
- SSHCiphers.macMap.keys(),
- descr='macs to choose from'),
- "host-key-algorithms": usage.CompleteMultiList(
- SSHClientTransport.supportedPublicKeys,
- descr='host key algorithms to choose from'),
- #"user-authentications": usage.CompleteMultiList(?
- # descr='user authentication types' ),
- },
- extraActions=[usage.CompleteUserAtHost(),
- usage.Completer(descr="command"),
- usage.Completer(descr='argument',
- repeat=True)]
- )
-
- def __init__(self, *args, **kw):
- usage.Options.__init__(self, *args, **kw)
- self.identitys = []
- self.conns = None
-
- def opt_identity(self, i):
- """Identity for public-key authentication"""
- self.identitys.append(i)
-
- def opt_ciphers(self, ciphers):
- "Select encryption algorithms"
- ciphers = ciphers.split(',')
- for cipher in ciphers:
- if cipher not in SSHCiphers.cipherMap:
- sys.exit("Unknown cipher type '%s'" % cipher)
- self['ciphers'] = ciphers
-
-
- def opt_macs(self, macs):
- "Specify MAC algorithms"
- if isinstance(macs, unicode):
- macs = macs.encode("utf-8")
- macs = macs.split(b',')
- for mac in macs:
- if mac not in SSHCiphers.macMap:
- sys.exit("Unknown mac type '%r'" % mac)
- self['macs'] = macs
-
- def opt_host_key_algorithms(self, hkas):
- "Select host key algorithms"
- if isinstance(hkas, unicode):
- hkas = hkas.encode("utf-8")
- hkas = hkas.split(b',')
- for hka in hkas:
- if hka not in SSHClientTransport.supportedPublicKeys:
- sys.exit("Unknown host key type '%r'" % hka)
- self['host-key-algorithms'] = hkas
-
- def opt_user_authentications(self, uas):
- "Choose how to authenticate to the remote server"
- if isinstance(uas, unicode):
- uas = uas.encode("utf-8")
- self['user-authentications'] = uas.split(b',')
-
- # def opt_compress(self):
- # "Enable compression"
- # self.enableCompression = 1
- # SSHClientTransport.supportedCompressions[0:1] = ['zlib']
|