Your commands are trying to put the new Document to the root (/
) of your machine. What you want to do is to transfer them to your home directory (since you have no permissions to write to /
). If path to your home is something like /home/erez
try the following:
scp My_file.txt user_id@server:/home/erez/
You can substitute the path to your home directory with the shortcut ~/
, so the following will have the same effect:
scp My_file.txt user_id@server:~/
You can even leave out the path altogether on the remote side; this means your home directory.
scp My_file.txt user_id@server:
That is, to copy the file to your desktop you might want to transfer it to /home/erez/Desktop/
:
scp My_file.txt user_id@server:/home/erez/Desktop/
or using the shortcut:
scp My_file.txt user_id@server:~/Desktop/
or using a relative path on the remote side, which is interpreted relative to your home directory:
scp My_file.txt user_id@server:Desktop/
Edit:
As @ckhan already mentioned, you also have to swap the arguments, it has to be
scp FROM TO
So if you want to copy the file My_file.txt
from the server user_id@server
to your desktop you should try the following:
scp user_id@server:/path/to/My_file.txt ~/Desktop/
If the file My_file.txt
is located in your home directory on the server you may again use the shortcut:
scp user_id@server:~/My_file.txt ~/Desktop/
You need to run the scp
command from the local machine, not on the remote. You don't need the ssh
at all:
dragonmnl@local $ scp -P 2222 file.ext username@domain:~/
You also don't need the -r
:
-r Recursively copy entire directories.
If you are already logged into the remote machine and want to copy from your local, you need to make sure that your local machine is accessible via the internet and has ssh
set up. I don't think this is what you are after but if it is, just run this from the remote:
username@domain $ scp dragonmnl@local:/path/to/file.ext ~/
Best Answer
There are a number of solutions.
Background & Disown the Process
scp
transfer as usual.bg
.)disown
).exit
) and the process will continue to run on the remote machine.One disadvantage to this approach is that the file descriptors for stdout and stderr will still contain references to your ssh session's tty. The terminal may hang when you try to exit because of this. You can work around this by typing
~.
to force close your ssh client (that escape sequence must follow a new line...see also~?
). If the process you are abandoning writes to stdout or stderr, the process may exit prematurely if the tty buffer overfills.Create a Screen Session and Detach It
GNU Screen can be used to create a remote terminal session, which can be detached and continue to run on the server after you log out of the session. You can then log back into the server at a later date and reattach to the session.
screen -D -R <session_name>
.scp
transfer as usual.exit
)To reattach to the session:
screen -D -R <session_name>
Run the Command without Hangups
See the answer using
nohup
.Use a Task Scheduler
This is the best solution if this is a periodic sort of task that you want to automate.
Use
crontab
,at
, orbatch
to schedule the transfer.