A user-friendly, interactive SCP (Secure Copy Protocol) client written in Rust that simplifies secure file transfers over SSH. This tool provides an intuitive command-line interface for uploading files to remote servers with progress tracking and multiple authentication methods.
- Interactive CLI: Step-by-step prompts guide you through the transfer process
- Progress Tracking: Real-time progress bar with transfer speed and ETA
- Multiple Authentication Methods:
- SSH key authentication (with optional passphrase)
- Password authentication (fallback)
- Smart Defaults: Automatically suggests sensible remote paths
- Cross-Platform: Works on Linux, macOS, and Windows
- Secure: Built on the robust
ssh2crate for reliable SSH connections
- Rust 1.70+ (for the 2024 edition)
- SSH access to your target server
-
Clone the repository:
git clone https://github.com/byte3-it/iscp.git cd iscp -
Build the project:
cargo build --release
-
Run the application:
cargo run --release
Simply run the application and follow the interactive prompts:
cargo run --releaseThe application will guide you through:
- Local file path - The file you want to upload
- Remote host - Target server (e.g.,
example.comor192.168.1.100) - Port - SSH port (default: 22)
- Username - Your SSH username
- Remote path - Destination path on the remote server (optional)
=====================================
π Interactive SCP File Transfer Tool
=====================================
π Local file path: ./my-document.pdf
π Remote host (e.g., example.com or 192.168.1.100): myserver.com
π Port (optional, press Enter for default 22):
π€ Username: myuser
π Remote path (optional, press Enter for default: /home/myuser/my-document.pdf):
π Connecting to remote host...
π Trying SSH key: /Users/myuser/.ssh/id_rsa
β
Authenticated with SSH key (no passphrase)
β
Connected and authenticated successfully!
π€ Starting file transfer...
ββββββββββββββββββββββββββββββββββββββββ 100% (2.1MB/2.1MB) (00:03)
β
File transfer completed successfully!
-
Clone the repository:
git clone https://github.com/yourusername/iscp.git cd iscp -
Install dependencies:
cargo build
-
Run in development mode:
cargo run
iscp/
βββ src/
β βββ main.rs # Main application logic
βββ Cargo.toml # Project dependencies and metadata
βββ Cargo.lock # Locked dependency versions
βββ README.md # This file
ssh2- SSH2 protocol implementation for secure connectionsindicatif- Progress bars and terminal UI componentsdialoguer- Interactive command-line promptsconsole- Terminal styling and colors
We welcome contributions! Here's how you can help:
- Fork the repository on GitHub
- Create a feature branch:
git checkout -b feature/your-feature-name
- Make your changes and test them thoroughly
- Run tests (when available):
cargo test - Commit your changes:
git commit -m "Add your feature description" - Push to your fork:
git push origin feature/your-feature-name
- Create a Pull Request on GitHub
- Follow Rust naming conventions
- Add comments for complex logic
- Test your changes with various file types and sizes
- Ensure the code compiles without warnings
- Consider edge cases (network failures, authentication issues, etc.)
Important: This is an early version of the project with the following limitations:
- Upload Only: Currently, the tool only supports uploading files from local to remote servers
- No Download Support: Downloading files from remote to local is not yet implemented
- Single File Transfer: Only one file can be transferred per session
- No Directory Support: Directory transfers are not supported
- Download files from remote servers
- Directory transfer support
- Batch file transfers
- Configuration file support
- Resume interrupted transfers
- Transfer verification (checksums)
- Custom SSH port configuration
- Verbose logging options
For the best experience, set up SSH key authentication:
-
Generate an SSH key (if you don't have one):
ssh-keygen -t ed25519 -C "your_email@example.com" -
Copy your public key to the remote server:
ssh-copy-id username@your-server.com
-
Test the connection:
ssh username@your-server.com
Authentication Failed:
- Ensure your SSH key is properly configured
- Check that the remote server allows key-based authentication
- Verify your username and server address
Connection Timeout:
- Check your network connection
- Verify the server address and port
- Ensure the remote server is running SSH
File Transfer Fails:
- Verify you have write permissions on the remote path
- Check available disk space on the remote server
- Ensure the remote directory exists
This project is open source. Please check the LICENSE file for details.
- Issues: Report bugs and request features on GitHub Issues
- Discussions: Join the conversation on GitHub Discussions
- Built with the amazing Rust ecosystem
- Uses the excellent
ssh2crate for SSH functionality - Inspired by the need for a more user-friendly SCP experience
Happy transferring! π
