Difference between revisions of "Satori/SSHModuleProposal"
< Satori
m |
m |
||
Line 13: | Line 13: | ||
==== Requirements ==== | ==== Requirements ==== | ||
* Manage authentication mechanisms, retry authenticating, and prefer SSH keys. | * Manage authentication mechanisms, retry authenticating, and prefer SSH keys. | ||
− | * Mange connecting and disconnecting when remote_execute is called. (Lazy load the auth object) | + | * Mange connecting and disconnecting when <code>remote_execute()</code> is called. (Lazy load the auth object) |
+ | * Attempt to handle password prompts for non-passwordless sudoers | ||
+ | * Attempt to handle requirements for pty/tty by retrying with a pty channel <ref name="get_pty"/> if the system responds with "sudo requires a tty" or similar | ||
* Support ssh proxy connections <ref name="sshproxy_connections"/>, and create an implementation that provides the same behavior whether connecting through a proxy or connecting to the remote host directly. | * Support ssh proxy connections <ref name="sshproxy_connections"/>, and create an implementation that provides the same behavior whether connecting through a proxy or connecting to the remote host directly. | ||
* Implement an instance property, <code>platform_info</code>, that will return the remote host's platform info using (python >=2.4)'s [http://docs.python.org/2/library/platform.html platform module] | * Implement an instance property, <code>platform_info</code>, that will return the remote host's platform info using (python >=2.4)'s [http://docs.python.org/2/library/platform.html platform module] | ||
Line 20: | Line 22: | ||
*** <code>{'arch': 'x86_64', 'dist': 'ubuntu', 'version': '12.04'}</code> | *** <code>{'arch': 'x86_64', 'dist': 'ubuntu', 'version': '12.04'}</code> | ||
− | + | <ref name="get_pty"> [https://github.com/paramiko/paramiko/blob/master/paramiko/channel.py#L122-L155 paramiko.channel.Channel.get_pty] See `sock` keyword argument.</ref> | |
− | <ref name=" | + | <ref name="sshproxy_connections"> [https://github.com/paramiko/paramiko/blob/master/paramiko/client.py#L210-L212 paramiko.client.SSHClient.connect] See `sock` keyword argument.</ref> |
<references /> | <references /> |
Revision as of 17:29, 7 March 2014
SSH Module Proposal
As an initial platform to enable data plane discovery, implement an SSH module using paramiko by extending its SSHClient class.
Desired Interface
>>> from satori.common.ssh import SSH >>> client = SSH(host="123.456.789.11", host_password="pa$$word", host_username="Tobias") >>> output = client.remote_execute("sudo echo hello", with_exit_code=True) >>> print output {'stdout': 'hello', 'stderr': '', 'exit_code': 0}
Requirements
- Manage authentication mechanisms, retry authenticating, and prefer SSH keys.
- Mange connecting and disconnecting when
remote_execute()
is called. (Lazy load the auth object) - Attempt to handle password prompts for non-passwordless sudoers
- Attempt to handle requirements for pty/tty by retrying with a pty channel [1] if the system responds with "sudo requires a tty" or similar
- Support ssh proxy connections [2], and create an implementation that provides the same behavior whether connecting through a proxy or connecting to the remote host directly.
- Implement an instance property,
platform_info
, that will return the remote host's platform info using (python >=2.4)'s platform module- architecture, distro, version
- e.g. Ubuntu 12.04 x86_64 would return
-
{'arch': 'x86_64', 'dist': 'ubuntu', 'version': '12.04'}
-
- ↑ 1.0 1.1 paramiko.channel.Channel.get_pty See `sock` keyword argument.
- ↑ 2.0 2.1 paramiko.client.SSHClient.connect See `sock` keyword argument.