Consider the following command:
ssh aristotle sudo /bin/sh < test.sh
I want the redirection to apply to
/bin/sh but it is consumed by sudo. Any ideas on how to achieve what I want?
Why not just copy over test.sh and then invoke it?
The $$ is the PID of the process on the local machine, giving some degree of randomness so your file doesn't get clobbered.
Redirection is working with ssh and sudo! It only interferes with any password dialog from ssh and/or sudo.
So EITHER you don't use redirection, but workarounds like e.g. copying the script to the target machine first and then executing it (as e.g. @edoloughlin suggested).
OR you configure ssh and sudo to not prompt for a password. Then it works like a charm:
There are thousands of howtos explaining how to use ssh passwordless, so i don't explain that part. And as for sudo, there are several ways to use it passwordless. @jtimberman suggested to allow the user in question passwordless sudo in general (via sudo's
I personally use the PAM module pam-ssh-agent. It allows sudo to authenticate against a forwarded ssh agent and only falls back to password-based authentication if no ssh agent is available. On Debian & Ubuntu just
and then configure as documented in pam_ssh_agent_auth(8).
Likely, sudo is prompting for a password and its trying to get it from your test.sh script.
There's two solutions.
First, you can assign NOPASSWD for your userid on the target system.
Or second, you can ssh to the system and provide a password to sudo, then run it again and
Of course, you'll want to take precautions about your password appearing in your shell history (such as put it in a file only you have access to, then get the value from that file via cat or similar).
I strongly prefer the former, with SSH key-based authentication only, no passwords at all, and the private key residing on one system: my laptop (protected with a 16+ character passphrase).
Contents of my test.sh: