Considere el siguiente comando:
ssh aristotle sudo /bin/sh < test.sh
Quiero que se aplique la redirección /bin/sh
pero sudo la consume. ¿Alguna idea sobre cómo lograr lo que quiero?
Respuesta1
¿Por qué no simplemente copiar test.sh y luego invocarlo?
scp test.sh aristotle:/tmp/test.$$.sh
ssh aristotle sudo /bin/sh /tmp/test.$$.sh
ssh aristotle rm /tmp/test.$$.sh
El $$ es el PID del proceso en la máquina local, lo que proporciona cierto grado de aleatoriedad para que su archivo no se vea afectado.
Respuesta2
Redirecciónestrabajando con ssh y sudo! Solo interfiere con cualquier diálogo de contraseña de ssh y/o sudo.
Entonces, O NO usas la redirección, sino soluciones como, por ejemplo, copiar el script a la máquina de destino primero y luego ejecutarlo (como, por ejemplo, @edoloughlinsugirió).
O configura ssh y sudo para que no soliciten una contraseña. Entonces funciona de maravilla:
$ echo "hostname" | ssh -A orwell sudo /bin/sh
orwell
Hay miles de instrucciones que explican cómo usar ssh sin contraseña, así que no explico esa parte. Y en cuanto a sudo, hay varias formas de utilizarlo sin contraseña. @jtimbermansugiriópara permitir al usuario en cuestión sudo sin contraseña en general (a través de la función sudo NOPASSWD
, consultesudoers(5)).
Yo personalmente uso el módulo PAM.pam-ssh-agente. Permite que sudo se autentique contra un agente ssh reenviado y solo recurre a la autenticación basada en contraseña si no hay ningún agente ssh disponible. En Debian y Ubuntu solo
apt-get install pam-ssh-agent-auth
y luego configurar como se documenta enpam_ssh_agent_auth(8).
Respuesta3
Pruebe de esta manera:
ssh aristotle sudo /bin/sh -c "/bin/sh \\< test.sh"
Respuesta4
Lo usé ssh somehost sudo cat \< /etc/passwd
con cierto éxito; prueba algo como:
ssh aristotle sudo /bin/sh \< test.sh