Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

100
Vistas
Cómo cambiar la contraseña de un usuario en Linux usando C#

siguiente escenario:

  • tengo permisos sudo
  • Conozco la contraseña antigua y nueva de un usuario

Ahora quiero escribir una aplicación C# .NET 6 que pueda cambiar la contraseña del usuario. En Linux simplemente llamaría

 sudo passwd username

Mi primera idea fue crear un nuevo proceso, redirigir el stdin y escribir la contraseña allí.
Otra opción sería crear un script bash y llamarlo desde C# (también usando un nuevo proceso).

Sin embargo, ambos me parecen un poco raros. ¿Hay alguna opción para cambiar la contraseña en proceso en C#?

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Algo en este sentido debería funcionar correctamente si ya tiene el script de shell de Linux.

 if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)){ var ShellScriptPath = $"-c '{ShellScriptPath } &>> {OutputTextFilePath}'"; var fileInfo = new FileInfo(ShellScriptPath); var startInfo = new ProcessStartInfo { CreateNoWindow = true, RedirectStandardOutput = true, RedirectStandardError = true, UseShellExecute = false, FileName = "/bin/bash", WindowStyle = ProcessWindowStyle.Hidden, Arguments = fileInfo.FullName, WorkingDirectory = WorkingDirectoryPath, }; using Process process = Process.Start(startInfo); process.WaitForExit(); process.Dispose(); }
over 4 years ago · Santiago Trujillo Denunciar

0

Programa.cs

 class PasswordChanger { static void Main(string[] args) { string password = args[1]; string user = args[0]; Console.WriteLine(ShellHelper.Bash($"echo -e \"{password}\n{password}\n\" | sudo passwd {user}")); } }

LinuxHelper.cs

 using System; using System.Diagnostics; namespace LinuxHelper { public static class ShellHelper { public static string Bash(string cmd) { string escapedArgs = cmd.Replace("\"", "\\\""); Process process = new Process() { StartInfo = new ProcessStartInfo { FileName = "/bin/bash", Arguments = $"-c \"{escapedArgs}\"", RedirectStandardOutput = true, UseShellExecute = false, CreateNoWindow = true, } }; process.Start(); string result = process.StandardOutput.ReadToEnd(); process.WaitForExit(); return result; } } }

El código anterior funciona, toma dos argumentos: el primero es el nombre de usuario, el segundo es la contraseña. He separado la solución en dos archivos porque LinuxHelper/Shellhelper se puede usar para cualquier comando de shell al que necesite llamar. La función/método principal también se puede modificar fácilmente para que sea un método estándar en cualquier proyecto. Si cambia el método Main para que sea un método dentro de una clase, le sugiero que cambie (string[] args) a (string user, string password), luego puede eliminar las declaraciones de cadena dentro del método.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda