In the world of secure file transfers and remote server access, ssh and scp are commonly used commands. However, these two commands differ in a seemingly small yet significant way: the flag used for specifying a custom port number. While ssh uses a lowercase ‘p’, scp requires an uppercase ‘P’. In this short blog, let’s explore the reasons behind this discrepancy.
When using ssh to connect to a remote server, specifying a port is straightforward. The lowercase ‘p’ is employed, as shown below:
ssh -p 2222 username@remote-server
In the context of ssh, the lowercase ‘p’ is dedicated solely for specifying the port, making it simple to remember.
On the other hand, scp (Secure Copy Protocol) uses an uppercase ‘P’ to specify the port:
scp -P 2222 local-file.txt username@remote-server:/path/to/remote/directory/
Why the uppercase? It turns out, scp already uses the lowercase ‘p’ to preserve file attributes like modification and access times:
scp -p local-file.txt username@remote-server:/path/to/remote/directory/
The different options (-p vs -P) between ssh and scp are primarily due to historical reasons and how each utility evolved. Each tool is a separate utility with a different primary function, even though they are part of the same OpenSSH suite. Over time, these utilities have maintained their distinct set of options, which unfortunately means that some inconsistencies like this exist.
Although this difference may seem minor, it can lead to mistakes or confusion when working with ssh and scp. It serves as a reminder that even in a unified suite of tools like OpenSSH, small inconsistencies can still be present. So next time you are specifying a custom port, remember: it’s ssh -p but scp -P.