TL;DR: Rebex File Server supports SFTP and SCP. If you want Linux scp
command to use the classic SCP protocol (called "SCP1" in the book you linked) instead of SFTP (called "SCP2" in the book), then "-f" is not how it's done. Use the "-O" switch instead:
scp -O -i keys.ppk snausages.txt laser@169.254.203.55:/home/laser/abcd.txt
This assumes you are using a recent version of OpenSSH. On other systems or with old OpenSSH versions, the syntax might be different, but it will never involve the "-f" switch. The purpose of that switch is entirely different, as explained below.
The explanation at the beginning of https://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch03_08.htm is somewhat confusing. The authors of that book invented their own terms ("SCP1" and "SCP2"), even though they don't actually exist. They use "SCP1" to refer to SCP, and they even acknowledge the non-existence of "SCP2" at that same page:
We suppose you could refer to SFTP as the "scp2 protocol," but we've never heard it and don't recommend it if you want to keep your sanity.
Here I 100% agree - those invented terms are confusing, and we should not use them. There is no "SCP2", and there is no "SCP1 mode". There are two file transfer protocols commonly used over SSH, and those are SFTP and SCP. But the scp
command at the client-side often supports both SFTP and SCP, which is what the linked text is trying to explain.
So what about the "SCP -f" switch? The "3.8.1. scp1 Details" chapter aims to explain the inner workings of the SCP protocol, and it explains that "-f" or "-t" switches are only used internally when the client-side scp
command invokes another instance of scp
at the remote server. In order to do this, it passes one of those switches to the remote scp
instance, which instructs it to start in SCP-server mode. Then, the client-side scp
can start communicating with the server-side scp
to upload or download data.
This can also be seen in the table below "3.8.1" - these switches are not actually used when starting scp
at the client-side. The client-side command is simply scp foo server:bar
or scp server:bar foo
. Internally, these commands actually start scp -t bar
or scp -f bar
at the server, but they are not supposed to passed to scp
from a Linux command line.
When you run scp -f -i keys.ppk snausages.txt laser@169.254.203.55:/home/laser/abcd.txt
, you are mixing server-side and client-side syntax. By passing the "-f" option, you have actually started SCP in server-side mode, so instead of connecting to an SSH server and transferring the file, the local SCP instance thinks it's a server, and starts reading SCP client's commands from the standard input of the process. But there is no SCP client there, so those commands never arrive (unless you actually type them properly into the Linux console) and the process hangs.
Please see this very informative answer for further details regarding the client-side SCP and it's options.
If you would like to learn more about the inner working of SCP, including the purpose of "-f" and "-t" switches, check How the SCP protocol works. However, please note that even though this might be interesting to know, this knowledge is not needed at all in order to use SCP to actually transfer files.