Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Strange SSH Behavior via system or exec

by cmv (Chaplain)
on Sep 18, 2014 at 14:57 UTC ( [id://1101061]=perlquestion: print w/replies, xml ) Need Help??

cmv has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks-

I can't explain this and need guidance from wiser minds - please help.

Here’s how to reproduce:

1.) Setup ssh public/private keys so that this unix shell command works without you having to enter a password:

$ ssh usr@remotehost date

2.) Run these command from your unix shell prompt - why does one FAIL (ask for password), while others don’t?

$ perl -e 'system("ssh usr\@remotehost date”)’ # works $ perl -e 'system("ssh -l usr remotehost date")’ # works $ perl -e 'system("ssh", "usr\@remotehost", "date”)’ # works $ perl -e 'system("ssh", "-l usr", "remotehost", "date”)’ # FAILS
You can replace system with exec and get the same result.

Thanks

-Craig

Replies are listed 'Best First'.
Re: Strange SSH Behavior via system or exec
by choroba (Cardinal) on Sep 18, 2014 at 15:08 UTC
    Also try
    perl -e 'system("ssh", "-l", "usr", "remotehost", "date")'
    لսႽ† ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
      ++choroba

      That works! Thanks.

      However, shouldn't both work, or am I missing something?

      -Craig

        perl -e 'system("ssh", "-lusr", "remotehost", "date")'
        works but...
        perl -e 'system("ssh", "-l usr", "remotehost", "date")'
        doesn't because it tries to log as user " usr"!

        Either you give system a single argument, which is the equivalent of giving that string to the shell to be executed (e.g. /bin/sh -c 'foo bar quz'), or you give system multiple arguments, in which case you are giving that command its argument list directly, without interpretation by the shell. One of the things the shell does is split arguments on whitespace (except Windows), which no longer happens when you give it "-l usr" as a single string. (While some commands may do their own whitespace splitting of their argv, I'd assume that's rare. Except on Windows, hence the need for something like Win32::ShellQuote.)

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://1101061]
Approved by choroba
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (5)
As of 2024-04-23 20:46 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found