Как передавать команды на команду propmt с помощью программы C - PullRequest
0 голосов
/ 16 марта 2012

Я хочу передать некоторые команды из моей программы на C, вот пример программы:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(){

    FILE *ssh = popen("ssh user@192.168.170.155", "w");

    pid_t pid;
    pid = fork();


    if(!ssh)
    {
        fprintf(stderr, "Could not open pipe for output.\n");
    } 

    if (pid==0){

        fprintf(stdout, "Child process properly created.\n");
        fputs("user", ssh); 
        fputc('\n', ssh);   // enter key 
         _exit(0);
    }


    fprintf(stdout, "Exit from child process.\n");
    pclose(ssh); 

    return 0 ;

}

Теперь, когда я запускаю эту программу, она запрашивает пароль в командной строке примерно так:

user@192.168.170.155's password:

Я хочу передать пароль из моей программы-примера, а не из командной строки.Может ли кто-нибудь, пожалуйста, скажите мне, как сделать это в C, программно.

SSH используется только для примера. Это может быть и для других сценариев.

Спасибо, Yuvi

Ответы [ 3 ]

2 голосов
/ 16 марта 2012

Я думаю, что команда ssh считывает пароль из stdin, и в этом случае вам нужно будет передать пароль в программу, и для этого вы можете использовать popen.Пример C99 / POSIX:

#include <stdio.h>

int main()
{
    FILE *ssh = popen("ssh user@host", "w");

    fputs("p4ssw0rd", ssh);
    fputc('\n', ssh); // enter key

    pclose(ssh);
}

Не проверено.Возможно, вам повезет больше, если использовать комбинацию fork / exec / dup и т. Д.

0 голосов
/ 14 марта 2013

Когда ssh намного проще настроить ssh-ключи, поэтому вам не нужно добавлять пароль. Однако, если вы действительно хотите это сделать, это очень легко сделать с помощью API с именем ожидаем. Я сам использовал это с хорошими результатами.

0 голосов
/ 16 марта 2012

Это возможно, но требует гораздо больше кода.Прежде всего, вам нужно использовать fork() вместо system() плюс один из вызовов exec*(), чтобы заменить дочерний процесс командой, которую вы хотите запустить. Часто задаваемые вопросы по программированию в Unix , в частности 1.Управление процессами и 1.5 Как могут взаимодействовать родительский и дочерний процессы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...