LiKao
LiKao

Reputation: 10658

No connection as non root using Net::SFTP::Foreign

I am trying to use a perl script to transfer files from one machine to another within a cron job. However for security reasons the cron job has to run as a unprivileged user. Now if I try to establish a connection using this unpriviliged user, Net::SFTP::Foreign always refuses to connect. Here is the part of the script I am having trouble with:

my $host = "hostname";
my %args = (
    user => "username",
    password => "password",                                                                                                                                                                                       
    port => '12345'
);
my $sftp_connection = Net::SFTP::Foreign->new($host, %args);
if( $sftp_connection->error ) {
    log_message( "E", "Error " . $sftp_connection->status() . " connecting to " . $host );
    die;
}
log_message( "A", "Connected" );

I cannot give a full example, as this would require username and password.

If I execute this script as root, everything works fine, however if I try to use another user, the connection always fails.

Is there a way to get some more diagnostic information? I think there was a way to get more output from the actual sftp process, but I cannot look it up right now as cpan currently does not work from here.

I previously also tried using Net::SFTP instead of Net::SFTP, but the error handling at later parts did not work correctly, so switching to Net::SFTP does not seem a viable option right now.

Upvotes: 1

Views: 310

Answers (2)

LiKao
LiKao

Reputation: 10658

Enabling debugging (thanks to all commenters), I could see that the host-key verification failed. So after I added the key to the list of allowed keys (by doing a manual ssh to the host once), everything worked fine.

For root the key must have been in the list already, so that it had nothing to do with priviledge, just with prior usage of the account (I seem have ssh'ed before from root to the other host).

Upvotes: 0

Ivan
Ivan

Reputation: 163

  1. Use metacpan.org

  2. Debugging:

For debugging purposes you can run ssh in verbose mode passing it the -v option: my $sftp = Net::SFTP::Foreign->new($host, more => '-v');

"Module description"

Upvotes: 1

Related Questions