I often need to transfer files over my home network between computers and have found that WiFi transfers really aren't the best idea. (facepalm) If I have a CAT-5, 5e, or 6 cable lying around, how can I connect one computer directly to the other with it? If a SSH server is running on server and I connect client to server using a CAT-5 cable directly between the two, can I then use SSH to transfer files? What do I need to do in order to set something like this up? Is a router required?


If at least one computer's network card supports auto-crossover, you can connect both with a direct cable. (Auto-crossover, also called "auto-MDIX", is part of the Gigabit Ethernet standard, but is very often supported by 100 Mbps cards too.) Otherwise, you'll need either a cross-over cable, a hub, or a switch.

After setting up the physical connection, configure networking in the OS:

  • If both ends have IPv6, you can just connect using the other computer's link-local address; for example, ssh fe80::4a5d:60ff:fee8:658f%eth0. (On Linux, the string after % is your Ethernet card's name, while Windows uses the numeric interface ID from netsh interface ipv6 show interface.)

    You can also add shorter addresses manually, such as fc00::1 and fc00::2 (from the fc00::/7 network).

  • For IPv4-only hosts, manually assign IP addresses from the same subnet – for example, and

    Some operating systems will automatically assign link-local IPv4 addresses in the range.

  • 1
    An update: just transferred a file at 70 megabytes per second for the win. – Naftuli Kay Dec 3 '12 at 21:36

I'd recommend you use an rsync server on one of the machines to avoid the encryption processing of ssh which might give you faster throughput, especially on low-speed CPUs:

On the "server" machine, create yourself an rsyncd.conf file containing something like:

comment =       Storage general files
path =          /home/user/Download
read only =     false
write only =    false
list =          true
incoming chmod = Du=rwx,go=rx,Fu=rw,go=r
uid =           user
gid =           user

Then fire up rsync in "server" mode:

sudo rsync --daemon --config=rsyncd.conf  --no-detach --log-file=/dev/tty

Then on the client, to receive:

rsync rsync://host/download/file-name local-file-name

or to send:

rsync local-file-name rsync://host/download/file-name

When you've finished, just CTRL-C the server process.

  • Very easy to follow solution. Thanks and +1 from me. I find doing all the samba, nfs and whatnot to tedious for a simply file transfer. Also nice tip for the exclusion of the encryption process! – rbaleksandar Aug 10 '15 at 21:52
  • @rbaleksandar: Thanks. Now that I have gigabit ethernet at home, I find I can generally exceed 100MB/sec with this technique whereas scp or rsync over ssh tends to max out at 20-40MB/sec. An even simpler technique is to use netcat (nc) directly on both machines. – Adrian Pronk Aug 10 '15 at 22:12
  • Will give it a shot. And yeah, the speed is really nice. Just transferred a an ISO of like 8GB in no time. :3 – rbaleksandar Aug 10 '15 at 23:52

The short version of it is:

  • If at least one of the computers has a gigabit interface, or one supports MDI/MDX no router is required. Plug in a plain CAT5E or better cable.
  • Of both have 10/100mbit cards use a cross-cable or two regular cables and a switch.

Next configure both computers to be in the same subnet and set up routing. (See this on our sister site: how-does-ipv4-subnetting-work for the background).

You did not mention which OS you are using, but assuming a unix like:

  • Computer 1: ifconfig em0 netmask (replace em0 with the name of the interface).
  • Computer 2: ifconfig em0 netmask
    Both network cards are now configured in for the same LAN.
  • Your OS is likely to 'automagically' add routes to the local network. If not use route add -net mask on computer 1. Do the same on computer 2 with route add -net mask

Test the connection with ping or copy with scp.

(Client:~homedir> scp myfile

  • I don't seem to get an automatically added route (Xubuntu 14.04) - after setting the IPs, trying to ssh to the other computer gives me "ssh: connect to host port 22: No route to host". And using your route add command gives me the Usage info for route, so presumably there's something wrong with the syntax. – weronika Feb 7 '16 at 2:34
  • It haws been a while since I posted it and I do not recall if I tested this in a VM with Linux or on FreeBSd. Will check when I am home with both OS's and add working syntax for both. – Hennes Feb 7 '16 at 11:33

You will either have to set up a bridge on server (S) with the usual network and then connect the client (C) to said network (IP-wise) or use a custom subnet. The latter is pretty straightforward (with eth0 being the connected interfaces on the client and server):

C # ip addr add dev eth0
S # ip addr add dev eth0

at this point, C # ping should work. If the SSH server on S is configured to listen on all interfaces (i.e., you should be ready to go, otherwise you will have to make it listen there (by adapting /etc/ssh/sshd_config).

If you don't get the speeds you expect, make sure (via ethtool eth0) that the connection speed has been detected properly. You can change it using the same tool.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.