mscp: transfer files over multiple SSH (SFTP) connections
C
269
441 commits
updated Jul 29, 2026
mscp, a variant of scp, copies files over multiple SSH (SFTP)
connections by multiple threads. It enables transferring (1) multiple
files simultaneously and (2) a large file in parallel, reducing the
transfer time for a lot of/large files over networks.
You can use mscp like scp, for example:
$ mscp srcfile user@example.com:dstfile
Remote hosts only need to run standard sshd supporting the SFTP
subsystem (e.g. openssh-server), and you need to be able to ssh to the
hosts as usual. mscp does not require anything else.
https://github.com/upa/mscp/assets/184632/19230f57-be7f-4ef0-98dd-cb4c460f570d
Major differences from scp on usage:
-r option is not needed to transfer directories.Paper:
# Homebrew
brew install upa/tap/mscp
# MacPorts
sudo port install mscp
sudo add-apt-repository ppa:upaa/mscp
sudo apt-get install mscp
sudo dnf copr enable upaaa/mscp
sudo dnf install mscp
mscp depends on a patched libssh. The patch introduces asynchronous SFTP Write, which is derived from https://github.com/limes-datentechnik-gmbh/libssh (see Re: SFTP Write async).
We test building mscp on Linux (Ubuntu, Rocky, Alma, and Alpine), macOS, and FreeBSD.
# clone this repository
git clone https://github.com/upa/mscp.git
cd mscp
# prepare patched libssh
git submodule update --init
patch -d libssh -p1 < patch/$(git -C libssh describe).patch
# install build dependency
bash ./scripts/install-build-deps.sh
# configure mscp
mkdir build && cd build
cmake ..
# in macOS, you may need OPENSSL_ROOT_DIR for cmake:
# cmake .. -DOPENSSL_ROOT_DIR=$(brew --prefix)/opt/openssl@3
# build
make
# install the mscp binary to CMAKE_INSTALL_PREFIX/bin (usually /usr/local/bin)
make install
Source tar balls (mscp-X.X.X.tar.gz, not Source code) in
Releases page contain the patched version
of libssh. So you can start from cmake with it.
manpage is available.
C
69.8%
Python
17.0%
Dockerfile
6.2%
CMake
5.5%
Shell
1.4%
mscp: transfer files over multiple SSH (SFTP) connections
C
269
441 commits
updated Jul 29, 2026
mscp, a variant of scp, copies files over multiple SSH (SFTP)
connections by multiple threads. It enables transferring (1) multiple
files simultaneously and (2) a large file in parallel, reducing the
transfer time for a lot of/large files over networks.
You can use mscp like scp, for example:
$ mscp srcfile user@example.com:dstfile
Remote hosts only need to run standard sshd supporting the SFTP
subsystem (e.g. openssh-server), and you need to be able to ssh to the
hosts as usual. mscp does not require anything else.
https://github.com/upa/mscp/assets/184632/19230f57-be7f-4ef0-98dd-cb4c460f570d
Major differences from scp on usage:
-r option is not needed to transfer directories.Paper:
# Homebrew
brew install upa/tap/mscp
# MacPorts
sudo port install mscp
sudo add-apt-repository ppa:upaa/mscp
sudo apt-get install mscp
sudo dnf copr enable upaaa/mscp
sudo dnf install mscp
mscp depends on a patched libssh. The patch introduces asynchronous SFTP Write, which is derived from https://github.com/limes-datentechnik-gmbh/libssh (see Re: SFTP Write async).
We test building mscp on Linux (Ubuntu, Rocky, Alma, and Alpine), macOS, and FreeBSD.
# clone this repository
git clone https://github.com/upa/mscp.git
cd mscp
# prepare patched libssh
git submodule update --init
patch -d libssh -p1 < patch/$(git -C libssh describe).patch
# install build dependency
bash ./scripts/install-build-deps.sh
# configure mscp
mkdir build && cd build
cmake ..
# in macOS, you may need OPENSSL_ROOT_DIR for cmake:
# cmake .. -DOPENSSL_ROOT_DIR=$(brew --prefix)/opt/openssl@3
# build
make
# install the mscp binary to CMAKE_INSTALL_PREFIX/bin (usually /usr/local/bin)
make install
Source tar balls (mscp-X.X.X.tar.gz, not Source code) in
Releases page contain the patched version
of libssh. So you can start from cmake with it.
manpage is available.
C
69.8%
Python
17.0%
Dockerfile
6.2%
CMake
5.5%
Shell
1.4%