Using SCP or SFTP with my ssh config file?

Perhaps my google-foo is failing me here... I'd like to connect and upload a mysql dump file via terminal using SFTP or SCP to my remote server using my ssh config file. According to documentation I've found, I should be able to do this:

sftp -F db.sql.gz [email protected] /tmp

I have also tired the alias in my config:

sftp -F db.sql.gz myalias /tmp

When I do the two above, I simply get a print out of possible commands, -F being one of them.

I can already connect via ssh using the shortcut in my local config just fine so I know that works:

ssh myalias

**Note: I am connecting using a private / public key pair so I never need to enter a password. The key pair does have a passphrase associated with it but OS X Keychain remembered that the first time I connected.

... so I am not sure what I am doing wrong.


  1. From the help text: "... [-F ssh_config] ..."

    According to the above, -F expects one argument: path to an OpenSSH configuration file, ~/.ssh/config or similar. But you are giving it a gzipped SQL dump instead.

    Since plain ssh myalias is already working, you don't even need the -F option here. Just sftp myalias would connect to the server.

  2. However, the OpenSSH sftp client does not support uploading files like you are trying to; it can only download files (using the syntax host:path) or work in interactive mode. For uploading, you need to use either the interactive mode...

    $ sftp myalias
    sftp> cd /tmp
    sftp> put db.sql.gz
    

    ...or the scp tool:

    scp db.sql.gz myalias:/tmp
    

    or

    scp db.sql.gz [email protected]:/tmp
    

(sftp does have a batch mode in which it can read commands from a file, using -b, but it is simpler to use scp for single uploads.)

There are other SFTP clients as well – lftp is good for interactive use, while curl can be easier to automate. For backups and such, you could also use rsync (which runs its own protocol but still inside SSH).