structure updates
This commit is contained in:
80
tech_docs/python/Paramiko.md
Normal file
80
tech_docs/python/Paramiko.md
Normal file
@@ -0,0 +1,80 @@
|
||||
In the intersection of Python and Linux, focusing on harnessing the capabilities of each for a fine-tuned purpose, `Paramiko` stands out as an extremely useful library. Paramiko is a Python implementation of the SSHv2 protocol, providing both client and server functionality. It allows for SSH programming in Python, enabling the execution of commands on remote machines, transferring files, and full SSH session management. Here's a concise reference guide for common use cases with `Paramiko`:
|
||||
|
||||
# `Paramiko` Reference Guide
|
||||
|
||||
## Installation
|
||||
```
|
||||
pip install paramiko
|
||||
```
|
||||
|
||||
## Basic Usage
|
||||
|
||||
### Establishing an SSH Connection
|
||||
```python
|
||||
import paramiko
|
||||
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # Automatically add host key
|
||||
ssh.connect('hostname', username='user', password='password') # Connect to the host
|
||||
```
|
||||
Replace `'hostname'`, `'user'`, and `'password'` with the actual hostname and credentials.
|
||||
|
||||
### Executing Commands Remotely
|
||||
```python
|
||||
stdin, stdout, stderr = ssh.exec_command('ls -l')
|
||||
print(stdout.read().decode())
|
||||
```
|
||||
This code executes `ls -l` on the remote machine and prints the output.
|
||||
|
||||
### Transferring Files
|
||||
#### Uploading Files
|
||||
```python
|
||||
sftp = ssh.open_sftp()
|
||||
sftp.put('localfilepath', 'remotefilepath') # Upload file
|
||||
sftp.close()
|
||||
```
|
||||
|
||||
#### Downloading Files
|
||||
```python
|
||||
sftp = ssh.open_sftp()
|
||||
sftp.get('remotefilepath', 'localfilepath') # Download file
|
||||
sftp.close()
|
||||
```
|
||||
|
||||
### Handling SSH Keys
|
||||
```python
|
||||
key = paramiko.RSAKey.generate(2048) # Generate a new RSA key
|
||||
private_key = key.write_private_key_file('private_key') # Save the private key
|
||||
public_key = key.get_base64() # Get the public key
|
||||
```
|
||||
SSH keys are more secure and recommended for authentication over passwords.
|
||||
|
||||
### Using SSH Keys for Authentication
|
||||
```python
|
||||
private_key_path = 'path/to/private/key'
|
||||
mykey = paramiko.RSAKey(filename=private_key_path)
|
||||
ssh.connect('hostname', username='user', pkey=mykey)
|
||||
```
|
||||
|
||||
### Starting an SSH Server with Paramiko
|
||||
Paramiko can also be used to create an SSH server in Python, though this is a more advanced use case and requires setting up server-side components and handling authentication and command execution manually.
|
||||
|
||||
## Advanced Usage
|
||||
|
||||
### Port Forwarding/SSH Tunneling
|
||||
Paramiko supports local and remote port forwarding, enabling secure tunneling of network traffic.
|
||||
|
||||
### Direct TCP/IP Channel
|
||||
You can open a direct TCP/IP channel to a remote host, which can be useful for protocols that need a direct connection (e.g., database connections).
|
||||
|
||||
### Interactive SSH Sessions
|
||||
Paramiko allows for more complex interactions with an SSH session, such as those requiring user input, by directly managing stdin, stdout, and stderr streams.
|
||||
|
||||
## Security Considerations
|
||||
- Always validate or manage host keys properly to avoid Man-In-The-Middle (MITM) attacks.
|
||||
- Prefer using SSH keys over passwords for authentication.
|
||||
- Keep your Paramiko library up to date to incorporate security patches.
|
||||
|
||||
`Paramiko` is an essential tool for automating administrative tasks, data collection, or managing cloud infrastructure across Linux servers from Python. It bridges the capabilities of Python with the secure communication needs of Linux environments, enabling developers and system administrators to automate and manage their systems more effectively.
|
||||
|
||||
Paramiko's comprehensive feature set for SSH communication makes it ideal for a wide range of system administration and automation tasks in mixed Python/Linux environments, offering a powerful and flexible way to manage remote systems securely.
|
||||
Reference in New Issue
Block a user