AsyncSSH provides native support for handling SSH connections and commands asynchronously in Python with asyncio, offering a more efficient alternative to Paramiko’s thread-based executor approach. Unlike Paramiko, which is synchronous, AsyncSSH is built specifically for asynchronous operations, making it a better fit for asyncio tasks.
Getting Started with AsyncSSH
Installation
Before you start, install AsyncSSH using pip:
pip install asyncssh
Basic AsyncSSH Connection
Here’s a simple way to establish an SSH connection and execute a command using AsyncSSH:
import asyncio, asyncssh, sys
async def run_client():
try:
async with asyncssh.connect('hostname') as conn:
result = await conn.run('ls', check=True)
print(result.stdout, end='')
except (OSError, asyncssh.Error) as exc:
sys.exit('SSH connection failed: ' + str(exc))
asyncio.run(run_client())
Authentication Handling
Authentication can be handled by providing additional parameters during the connection setup:
async with asyncssh.connect('hostname', username='your_username', password='your_password') as conn:
# Connection code here
Or using a private key:
async with asyncssh.connect('hostname', username='your_username', client_keys=['/path/to/private/key']) as conn:
# Connection code here
Advanced Usage and Features
AsyncSSH isn’t just for executing commands; it supports a wide array of SSH-related tasks:
- Port forwarding
- Running an SSH server
- Handling multiple sessions
- File transfers using SFTP
Considerations When Using AsyncSSH
- Asynchronous Nature: Remember that all operations are non-blocking and should be handled within async functions.
- Error Handling: Properly handle exceptions and errors especially when dealing with network operations.
- Compatibility: Ensure that AsyncSSH is compatible with your server’s SSH implementation and version.
Why Not Paramiko with Asyncio?
While Paramiko can work with asyncio through run_in_executor for SSH operations, AsyncSSH with asyncio for asynchronous SSH connections delivers cleaner, more performant concurrent SSH handling without threading overhead.
