Search code examples
javascriptsshbuildscpgulp

How to copy a folder over SSH with Gulp?


I have been experimenting with gulp lately, and have had a lot of success, but now I am stumped.

I have gulp building everything, and I want to upload a folder afterwards. I have created a deploy task for this using gulp-scp2:

gulp.task('deploy', ['clean', 'build'], function() {
    var privateKeyPath = getUserHome() + '/.ssh/id_rsa';

    gulp.src('public/dist')
        .pipe(scp({
            host: 'myhost',
            username: 'user',
            dest: '/home/user/test',
            agent: process.env['SSH_AUTH_SOCK'],
            agentForward: true,
            watch: function(client) {
                client.on('write', function(o) {
                    console.log('write %s', o.destination);
                });
            }
        })).on('error', function(err) {
            console.log(err);
        });
});

Unfortunately, when I do this, I get the following error:

Error: Content should be buffer or file descriptor

How can I copy a folder over SSH using gulp?


Solution

  • I did end up finding a solution by leveraging the node scp2 library:

    scpClient = require('scp2');
    
    gulp.task('scp', [], function (cb) {
        scpClient.scp('local_folder', {
            "host": "remote_host",
            "port": "remote_port",
            "username": "username_on_remote",
            "path": "/path/on/remote",
            "agent": process.env["SSH_AUTH_SOCK"],
            "agentForward": true
        }, cb)
    });