RocketNuts
RocketNuts

Reputation: 11120

Automating SFTP password authentication on macOS for use with -b batch processing?

I want a script to upload daily files using sftp. Unfortunately, the remote server doesn't support ssh keys (it's my customer's server and for some reason they can't or won't change it despite countless recommendations). So I need to somehow log in automatically using password authentication.

I found many different solutions (here on SO and elsewhere) but they all seem to use tools like sshpass, spawn, expect, send etc. Unfortunately my script is to be used on macOS and these tools aren't available there.

I fully realize it is NOT secure to use plaintext passwords in a script or on the command line. But using ssh keys is simply not an option at this stage.

So, is it possible to run sftp from the shell and specify the password either on the command line in plaintext, or specify some argument with a filename that contains the password?

Addition: after @MartinPrikryl's comment I got sshpass to work, by using brew install esolitos/ipa/sshpass.
However now I found out this doesn't work properly when I use the -b batch.txt parameter for sftp to process a bunch of commands. The batches I'm processing are typically a bunch of get and put commands.

So this works:

sshpass -f MyPassword.txt sftp [email protected]

(I am logged in and getting the sftp prompt)

But this does not:

sshpass -f MyPassword.txt sftp -b list.txt [email protected]

I'm getting this error:

[email protected]: Permission denied (password).

So apparently the way sshpass sends the password to sftp somehow interferes with the batch input from the -b parameter.

Is there a way to make sshpass (or another form of scriptable authentication) work in combination with the -b option??

Upvotes: 1

Views: 2812

Answers (1)

Martin Prikryl
Martin Prikryl

Reputation: 202177

First, you can install sshpass even on MacOS:
How to install sshpass on Mac?


Though indeed, with -b switch, the sftp probably cannot accept a password, as the -b disables all interactive input (what sshpass simulates).

As an alternative to -b, you can use an input redirection:

sshpass -f MyPassword.txt sftp [email protected] < list.txt

Upvotes: 2

Related Questions