Transfer files to/from a minimal machine with SSH access.
Project description
simple_ssh_copy
Transfer files to and from small or old POSIX-like devices over SSH.
This package intentionally avoids SFTP/SCP subsystems. It only needs a working SSH login and a few basic POSIX shell commands, so it is useful for minimal Linux systems, embedded devices, rescue environments, and older SSH servers.
Features
- Upload a local file to a remote host.
- Download a remote file to the local machine.
- Download a remote directory recursively.
- Aborts with a yellow warning when the remote system is detected as Windows.
- Prints the remote architecture detected with
uname -mbefore transfers. - Password, empty-password, SSH agent,
~/.sshkey, and explicit private-key authentication. - Legacy SSH compatibility enabled by default:
HostKeyAlgorithms=+ssh-rsa- RSA public-key signing with
ssh-rsa MACs=+hmac-sha1-96,hmac-sha1,hmac-md5
For implementation notes, transfer flow, block sizes, and compatibility details, see Technical Details.
Install
pip install simple_ssh_copy
For local development:
pip install -e .
Command Line
Upload a file:
python -m simple_ssh_copy ./test-file.txt root@192.168.1.10:/home/root/test-file.txt
Download a file:
python -m simple_ssh_copy root@192.168.1.10:/home/root/test-file.txt ./test-file.txt
Use a non-default port:
python -m simple_ssh_copy ./test-file.txt root@192.168.1.10:2222:/home/root/test-file.txt
Use an explicit private key:
python -m simple_ssh_copy -i ~/.ssh/id_rsa ./test-file.txt root@192.168.1.10:/home/root/test-file.txt
On Windows:
python -m simple_ssh_copy -i C:\Users\neko\.ssh\id_rsa .\test-file.txt root@169.254.115.127:/home/root/test-file.txt
Increase the SSH timeout:
python -m simple_ssh_copy --timeout 60 ./test-file.txt root@192.168.1.10:/home/root/test-file.txt
When prompted for a password, press Enter for empty-password or key-only login.
In that case the client also tries SSH agent and keys discoverable in ~/.ssh.
Python API
import simple_ssh_copy
hostname = "192.168.1.10"
username = "root"
password = ""
simple_ssh_copy.upload(
hostname=hostname,
username=username,
password=password,
files=[("./test-file.txt", "/home/root/test-file.txt")],
key_filename="~/.ssh/id_rsa",
)
simple_ssh_copy.download(
hostname=hostname,
username=username,
password=password,
files=[("/home/root/test-file.txt", "./test-file.txt")],
key_filename="~/.ssh/id_rsa",
)
simple_ssh_copy.download_dir(
hostname=hostname,
username=username,
password=password,
remote_dir="/home/root/logs",
local_dir="./logs",
key_filename="~/.ssh/id_rsa",
)
Run a remote command with the low-level client:
from simple_ssh_copy import SimpleSSHClient
with SimpleSSHClient(
hostname="192.168.1.10",
username="root",
password="",
key_filename="~/.ssh/id_rsa",
) as ssh:
code, stdout, stderr = ssh.exec_cmd("uname -a")
Legacy SSH Notes
Some old devices require options like:
ssh -o HostKeyAlgorithms=+ssh-rsa \
-o MACs=+hmac-sha1-96,hmac-sha1,hmac-md5 \
-i ~/.ssh/id_rsa root@192.168.1.10
simple_ssh_copy enables the Paramiko equivalents by default, so the matching
file-transfer command is usually:
python -m simple_ssh_copy -i ~/.ssh/id_rsa ./file root@192.168.1.10:/tmp/file
If you need stricter modern SSH behavior, pass
allow_ssh_rsa_host_key=False from the Python API.
Path Format
Remote paths use one of these formats:
user@host:/remote/path
user@host:port:/remote/path
Only local-to-remote and remote-to-local transfers are supported. Remote-to- remote transfers are not supported.
Limitations
- The remote host must provide a POSIX-like shell.
- Non-POSIX SSH servers, such as Windows command-shell SSH sessions, are not supported. Windows remotes are detected after SSH connection setup and abort with a yellow warning before file operations begin.
- Transfer startup reports the remote architecture with
uname -m. - Upload uses
mkdirandbase64on the remote host. - Upload sends base64 fragments through bounded remote commands, then decodes the assembled temporary file on the remote host.
- Download uses
stat,dd, andfindfor directory downloads. - Directory upload is not implemented.
- Very large uploads may be slower than real SCP/SFTP because data is written through remote shell commands.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file simple_ssh_copy-0.1.13.tar.gz.
File metadata
- Download URL: simple_ssh_copy-0.1.13.tar.gz
- Upload date:
- Size: 12.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.11.15 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2806fdae7d8d9bb8f4b82d41bcf22b7cd65ff8ad3b7d75ce1fce097c3628e94e
|
|
| MD5 |
cd602b02afeb368fd6bb20b842236cc0
|
|
| BLAKE2b-256 |
4faf88e513faaac48faec5aeb1714e7bd79c3d1868c5d3da4f3af3b4ae317287
|
File details
Details for the file simple_ssh_copy-0.1.13-py3-none-any.whl.
File metadata
- Download URL: simple_ssh_copy-0.1.13-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.4.1 CPython/3.11.15 Windows/10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
17a7059ec704bdec3605dfa462d3fc3b0d420aa7d635b6de3f9e3dce089f6f30
|
|
| MD5 |
e738e5306646cf2e038af9ad61fbaf4b
|
|
| BLAKE2b-256 |
79ea9b1828da8a4bb68715157f47190dd0c2b0960cffd47d0ee7ae886f4d9420
|