Tengo un script que ejecuta otro script a través de SSH en un servidor remoto usando sudo. Sin embargo, cuando escribo la contraseña, aparece en el terminal. (De lo contrario, funciona bien)
ssh user@server "sudo script"
¿Cuál es la forma correcta de hacer esto para que pueda escribir la contraseña de sudo sobre SSH sin que aparezca la contraseña mientras escribo?
ssh <user@server> sudo <script>
, ya que llegaba el errorsudo: no tty present and no askpass program specified
Respuestas:
Otra forma es usar el
-t
interruptor parassh
:Ver
man ssh
:fuente
ssh -t localhost <<< "sudo touch file;"
EDITAR Aparentemente es importante que proporcione el comando como un parámetro, no a través del estándar en (lo cual tiene sentido en retrospectiva).-t
método también mostrará resultados coloreados de comandos que normalmente lo hacen.Pude automatizarlo completamente con el siguiente comando:
Ventajas:
Con respecto a la seguridad: como dijo Kurt , ejecutar este comando mostrará su contraseña en su historial local de bash, y es mejor guardar la contraseña en un archivo diferente o guardar el comando all en un archivo .sh y ejecutarlo. NOTA: El archivo debe tener los permisos correctos para que solo los usuarios permitidos puedan acceder a él.
fuente
-t
, ¡pero no había leído el manual lo suficiente como para ver que podía pasarlo dos veces! ¡Esto es lo que he estado buscando durante meses! Como una adición de seguridad, simplemente configuré una variable de contraseña antes de ejecutarread -s -p "Password: " pw
, y luego lo hiceecho "$pw" | ....
. Ahora he convertido esto en un útil script para mí :).Suponiendo que no desea solicitar una contraseña :
Ejemplo
fuente
Sudo sobre SSH pasando una contraseña, no se requiere tty:
Puede usar sudo sobre ssh sin forzar a ssh a tener un pseudo-tty (sin el uso del interruptor ssh "-t") diciéndole a sudo que no requiera una contraseña interactiva y simplemente tome la contraseña del stdin. Para ello, utilice el interruptor "-S" en sudo. Esto hace que sudo escuche la contraseña en stdin y deje de escuchar cuando vea una nueva línea.
Ejemplo 1 - Comando remoto simple
En este ejemplo, enviamos un
whoami
comando simple :Le estamos diciendo a sudo que no emita un aviso y que tome su entrada de stdin. Esto hace que la contraseña de sudo pase completamente silenciosa, por lo que la única respuesta que obtiene es la salida de
whoami
.Esta técnica tiene el beneficio de permitirle ejecutar programas a través de sudo sobre ssh que requieren la entrada de stdin. Esto se debe a que sudo está consumiendo la contraseña en la primera línea de stdin, y luego permite que cualquier programa que ejecute continúe agarrando stdin.
Ejemplo 2: comando remoto que requiere su propio stdin
En el siguiente ejemplo, el comando remoto "cat" se ejecuta a través de sudo, y estamos proporcionando algunas líneas adicionales a través de stdin para que se muestre el gato remoto.
La salida demuestra que la
<remote_sudo_password>
línea está siendo consumida por sudo, y que el gato ejecutado remotamente muestra las líneas adicionales.Un ejemplo de dónde esto sería beneficioso es si desea usar ssh para pasar una contraseña a un comando privilegiado sin usar la línea de comando. Diga, si desea montar un contenedor cifrado remoto a través de ssh.
Ejemplo 3 - Montaje de un contenedor remoto VeraCrypt
En este script de ejemplo, estamos montando de forma remota un contenedor VeraCrypt a través de sudo sin ningún texto adicional:
Cabe señalar que en todos los ejemplos de línea de comandos anteriores (todo excepto el script), la
<< EOF
construcción en la línea de comando hará que todo lo que se escriba, incluida la contraseña, se registre en la máquina local .bash_history. Por lo tanto, se recomienda encarecidamente que, para el uso en el mundo real, lo use completamente a través de un script, como el ejemplo de veracrypt anterior, o, si está en la línea de comando, coloque la contraseña en un archivo y redirija ese archivo a través de ssh.Ejemplo 1a - Ejemplo 1 sin contraseña de línea de comandos local
El primer ejemplo se convertiría así:
Ejemplo 2a - Ejemplo 2 sin contraseña de línea de comandos local
y el segundo ejemplo sería:
Poner la contraseña en un archivo separado es innecesario si está poniendo todo en un script, ya que el contenido de los scripts no termina en su historial. Sin embargo, aún puede ser útil, en caso de que desee permitir que los usuarios que no deberían ver la contraseña ejecuten el script.
fuente
cat
y canalizar los resultados en sudo? ¿Puedes usarlosudo
como el comando remoto principal ssh?cat
se utiliza para canalizar la contraseña del usuario a sudo en el otro lado. Si el usuario puede ejecutar sudo sin una contraseña, entonces no es obligatorio, pero no sugiero esta configuración. La razón por la que se canaliza es para evitar que la contraseña aparezca en la línea de comando del sistema remoto. Las líneas de comando no son seguras, cualquier usuario puede ver cada línea de comando conps auxwww
.cat
en el comando sshcat \| sudo --prompt="" -S...
. Si las-S
fuerzassudo
para leer la contraseña de stdin, ¿son necesarios el gato y la tubería? ¿Podría ser simplemente el comando sshsudo --prompt="" -S...
?La mejor manera es
ssh -t user@server "sudo <scriptname>"
, por ejemplossh -t user@server "sudo reboot"
. Solicitará primero la contraseña para el usuario y luego la raíz (ya que estamos ejecutando el script o comando con privilegio de root.Espero que haya ayudado y aclarado tu duda.
fuente
NOPASS
en la configuración en su máquina de destino es la solución. Continúe leyendo en http://maestric.com/doc/unix/ubuntu_sudo_without_passwordfuente
fuente
Me enfrenté a un problema
Entonces intenté con
no funcionó
eso funcionó correctamente!
fuente
Dependiendo de su uso, tuve éxito con lo siguiente:
Esto solicitará la contraseña de root y luego ejecutará el comando correctamente.
fuente