AsyncSSH is a Python package which provides an asynchronous client and server implementation of the SSHv2 protocol on top of the Python 3.4+ asyncio framework.
import asyncio, asyncssh, sys
@asyncio.coroutine
def run_client():
with (yield from asyncssh.connect('localhost')) as conn:
stdin, stdout, stderr = yield from conn.open_session('echo "Hello!"')
output = yield from stdout.read()
print(output, end='')
status = stdout.channel.get_exit_status()
if status:
print('Program exited with status %d' % status, file=sys.stderr)
else:
print('Program exited successfully')
asyncio.get_event_loop().run_until_complete(run_client())
- Check out the examples to get started!
- Full support for SSHv2 and SFTP client and server functions
- Shell, command, and subsystem channels
- Environment variables, terminal type, and window size
- Direct and forwarded TCP/IP channels
- Local and remote TCP/IP port forwarding
- SFTP protocol version 3 with OpenSSH extensions
- Multiple simultaneous sessions on a single SSH connection
- Multiple SSH connections in a single event loop
- Byte and string based I/O with settable encoding
- A variety of key exchange, encryption, and MAC algorithms
- Support for gzip compression
- Including OpenSSH variant to delay compression until after auth
- Password, public key, and keyboard-interactive user authentication methods
- Many types and formats of public keys and certificates
- OpenSSH-style known_hosts file support
- OpenSSH-style authorized_keys file support
- Compatibility with OpenSSH "Encrypt then MAC" option for better security
- Time and byte-count based session key renegotiation
- Designed to be easy to extend to support new forms of key exchange, authentication, encryption, and compression algorithms
This package is released under the following terms:
Copyright (c) 2013-2015 by Ron Frederick <[email protected]>. All rights reserved.
This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution and is available at:
http://www.eclipse.org/legal/epl-v10.html
For more information about this license, please see the Eclipse Public License FAQ.
To use asyncssh
, you need the following:
- Python 3.4 or later
- PyCrypto 2.6 or later and/or PyCA 0.6.1 or later
Install AsyncSSH by running:
pip install asyncssh
There are some optional modules you can install to enable additional functionality:
- Install bcrypt from https://code.google.com/p/py-bcrypt if you want support for OpenSSH private key encryption.
- Install libsodium from https://github.com/jedisct1/libsodium and libnacl from https://github.com/saltstack/libnacl if you want support for curve25519 Diffie Hellman key exchange, ed25519 keys, and the chacha20-poly1305 cipher.
AsyncSSH defines the following optional PyPI extra packages to make it easy to install any or all of these dependencies:
pycryptopycabcryptlibnacl
For example, to install all of these, you can run:
pip install 'asyncssh[pycrypto,pyca,bcrypt,libnacl]'
Note that you will still need to manually install the libsodium library listed above for libnacl to work correctly. Unfortunately, since libsodium is not a Python package, it cannot be directly installed using pip.
Three mailing lists are available for AsyncSSH:
- [email protected]: Project announcements
- [email protected]: Development discussions
- [email protected]: End-user discussions