Je suis en train de développer un logiciel en C qui doit être SSH sur une autre machine et exécuter des commandes en tant que root.Est-il possible de surcharger le mot de passe attendu par SSH de/dev/tty en C
Quelque chose qui ressemble à ceci:
char* GetPasswd(void);
void run(char* apnSshCommand)
{
FILE* lphSshFD = popen(apnSshCommand,"w");
fprintf(lphSshFD,GetPasswd());
fflush(lphSshFD);
fprintf(lphSshFD,"#Command to run in shell");
fflush(lphSshFD);
}
GetPasswd() serait un rappel à une interface utilisateur graphique où l'utilisateur a tapé le mot de passe
Je sais que le code ci-dessus n'est pas possible puisque SSH regarde à son propre/dev/tty pour fournir le mot de passe pour l'authentification.
J'ai lu des messages tels que this qui provoque une réponse en utilisant ioctl() et fcntl() mais n'en fournit pas. Avec this qui montre qu'il est possible de la ligne de commande mais je n'ai pas été en mesure de le traduire.
L'utilisation attendre est pas une option
L'utilisation des clés SSH sont pas une option
La bibliothèque SSH C est PAS une option
L'utilisation sshpass est PAS un option
Sans ceux-ci, le sur Ce que je peux penser est de commencer un nouveau processus enfant et de rediriger/fermer les descripteurs de fichiers pour contrôler ce à quoi ssh a accès. EDIT: Ces restrictions proviennent du fait que le système sur lequel je travaille est très ancien et ne contient pas d'outils tels que expect, sshpass et la bibliothèque C SSH, et est soumis à de multiples restrictions concernant les sshkeys peut être utilisé
'fprintf (lphSshFD, GetPasswd());' semble erroné. Où est l'argument chaîne de format à 'fprintf()'? – Barmar
Que diriez-vous d'utiliser les clés publiques SSH? – Barmar
'lpSshFD' semble mauvais, vous programmez API Windows? –