97

I am attempting to copy a local file 'magento.tar.gz' from my local machine to a remote server using SSH through a VPN. This is connecting to the Virtual Machine's Internal IP which I've used as xx.x.x.xx here.

I have full 'sudo' access on the SSH account so there shouldn't be any problem copying across. I have tried the following:

I have tried the following (the magento.tar.gz file is already in the local root dir)

sudo scp magento.tar.gz user@xx.x.x.xx/var/www/

This asks me to type in my local password. Afterwards returns cp: user@xx.x.x.xx/var/www: Not a directory

sudo scp /Users/myname/magento.tar.gz user@xx.x.x.xx/var/www/

Returns the same.

Do I need to include a SSH in there anywhere?

Do I need to connect via SSH to the site first?

Side note: I've managed to connect via SSH to the server, browse to the directory and make a folder and delete it using sudo mkdir etc so I definitely have permissions.

James
  • 3,233
  • 3
  • 40
  • 57

4 Answers4

213

At first, you need to add : after the IP address to indicate the path is following:

scp magento.tar.gz user@xx.x.x.xx:/var/www

I don't think you need to sudo the scp. In this case it doesn't affect the remote machine, only the local command.

Then if your user@xx.x.x.xx doesn't have write access to /var/www then you need to do it in 2 times:

Copy to remote server in your home folder (: represents your remote home folder, use :subfolder/ if needed, or :/home/user/ for full path):

scp magento.tar.gz user@xx.x.x.xx:

Then SSH and move the file:

ssh user@xx.x.x.xx
sudo mv magento.tar.gz /var/www
JScoobyCed
  • 10,203
  • 6
  • 34
  • 58
  • Thanks. I tried it with the colon but get Permission denied - I've been informed that I have full sudo access so Permissions shouldn't be an issue. – James Aug 06 '12 at 03:30
  • 1
    Thanks!!! I had to SSH the remote and pwd to find what default directory I was taken to which was /home/username - scp magento.tar.gz user@xx.x.x.xx:/home/username/ did the trick! – James Aug 06 '12 at 03:38
19

Just to clarify the answer given by JScoobyCed, the scp command cannot copy files to directories that require administrative permission. However, you can use the scp command to copy to directories that belong to the remote user.

So, to copy to a directory that requires root privileges, you must first copy that file to a directory belonging to the remote user using the scp command. Next, you must login to the remote account using ssh. Once logged in, you can then move the file to the directory of your choosing by using the sudo mv command. In short, the commands to use are as follows:

Using scp, copy file to a directory in the remote user's account, for example the Documents directory:

scp /path/to/your/local/file remoteUser@some_address:/home/remoteUser/Documents

Next, login to the remote user's account using ssh and then move the file to a restricted directory using sudo:

ssh remoteUser@some_address
sudo mv /home/remoteUser/Documents/file /var/www
legend12
  • 295
  • 5
  • 11
0

Watch that your file name doesn't have : in them either. I found that I had to mv blah-07-08-17-02:69.txt no_colons.txt and then scp no-colons.txt server: then don't forget to mv back on the server. Just in case this was an issue.

pjammer
  • 9,489
  • 5
  • 46
  • 56
0

For scp:

 scp /path/to/your/localFiles remoteUser@remoteAddress:remoteport/home/remoteUser/yourRemoteFiles

rsync works well and better:

rsync -aP /path/to/your/localFiles remoteUser@remoteAddress:remoteport/home/remoteUser/yourRemoteFiles

And both commands work vice versa too, remote server to the local machine, and local machineto remote server