What it is
Paramiko is a Python library for SSH2 protocol, providing both client and server functionality. It allows you to securely connect to remote machines, execute commands, transfer files over SFTP, and manage SSH sessions programmatically.
Paramiko provides SSH client and server implementations. You can connect to remote servers, run shell commands, upload and download files using SFTP, and handle keys and authentication. It supports password and key-based authentication, as well as SSH agent integration.
Installation
pip install paramikoGetting started
The smallest useful thing you can do with it, and what each part means.
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('example.com', username='user', password='pass')
stdin, stdout, stderr = ssh.exec_command('ls -l')
print(stdout.read().decode())
ssh.close()import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
private_key = paramiko.RSAKey.from_private_key_file('/path/to/key.pem')
ssh.connect('example.com', username='user', pkey=private_key)
stdin, stdout, stderr = ssh.exec_command('uptime')
print(stdout.read().decode())
ssh.close()Advanced usage
Where the library earns its place over a simpler alternative.
import paramiko
transport = paramiko.Transport(('example.com', 22))
transport.connect(username='user', password='pass')
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('local_file.txt', 'remote_file.txt')
sftp.get('remote_file.txt', 'local_copy.txt')
sftp.close()
transport.close()import paramiko
with paramiko.SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('example.com', username='user', password='pass')
stdin, stdout, stderr = ssh.exec_command('whoami')
print(stdout.read().decode())import paramiko
agent = paramiko.Agent()
keys = agent.get_keys()
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('example.com', username='user', pkey=keys[0])Errors and fixes
The failures you are most likely to hit, and what actually resolves them.
- AuthenticationException
- Raised when authentication fails. Verify username, password, and key files.
- SSHException
- General SSH error. Check server status and compatibility with Paramiko.
- NoValidConnectionsError
- Occurs when unable to connect to the specified host/port. Ensure the server is accessible.
Best practices
- Always handle missing host keys with `AutoAddPolicy()` or manually add known hosts.
- Prefer key-based authentication over passwords for better security.
- Close SSH and SFTP connections properly to release resources.
- Use paramiko logging to debug connection and authentication issues.
- For long-running scripts, handle network interruptions and reconnections.
Background
Why it exists, and what it was reacting to.
Paramiko was created by Robey Pointer in 2003 to provide a pure-Python implementation of the SSHv2 protocol. It became a popular tool for automating server administration, remote command execution, and secure file transfers in Python applications.
