He estado tratando de escribir una pequeña biblioteca utilizando Thor para ayudarme a crear proyectos y sitios nuevos. Escribí este pequeño método:Net :: SSH comando sudo se cuelga después de ingresar la contraseña
def ssh(cmd)
Net::SSH.start(server_ip, user, :port => port) do |session|
session.exec cmd
end
end
a sólo me ayudan en la ejecución de comandos rápidos en servidores remotos cuando sea necesario.
El problema es cuando necesito ejecutar un comando bajo sudo en el extremo remoto, el script simplemente parece colgarse de mí. Por ejemplo, cuando la ejecución de este ...
ssh("sudo cp #{file_from_path} #{file_to_path}")
El guión me va a pedir una contraseña
[sudo] password for user:
Pero entonces todo hhangs después de escribir en.
qué alguien pasar a conocer ¿Por qué se cuelga exactamente, y qué puedo hacer para ejecutar el comando sudo en un servidor remoto en Net :: SSH (o alguna alternativa)?
* nota: Antes había sugerido, originalmente había comenzado a escribir esta biblioteca como una receta en Capistrano, hasta que encontré a Thor, y pensé que sería una buena oportunidad para probarlo. No estoy en contra de tener que cambiar todo de nuevo a Capistrano si es necesario, pero me sorprendería mucho que no haya una manera fácil de ejecutar comandos sudo en un servidor remoto.
¿puede insertar la contraseña? 'ssh (" sudo cp # {from} # {to} <"mysupass") ' – Fosco
por supuesto me olvidé de escapar de las comillas dobles en el comentario anterior. – Fosco
Probé esto, pero no funciona. Vuelve con "bash: mysupass: No existe ese archivo o directorio". ¿Es esto un intento de pasar la contraseña al prompt? De ser así, la idea podría funcionar, pero la sintaxis probablemente esté apagada. Veré qué puedo encontrar sobre eso. – joeellis