Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> redirect stdin to file before exec() 
:(
    Опции темы
IoganeGambaPuti
Дата 6.4.2009, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.1.2009

Репутация: нет
Всего: нет



Здравствуйте!Следующим вызовом,я пытаюсь выполнить ssh:
Код

 pid_t pid;
  int res;
  int fdIN,fd;
  pid=fork();
  switch(pid)
    {
    case 0:
      fd=open("/home/User/file_with_password",O_RDONLY);
      fdIN=dup(STDIN_FILENO);
      dup2(fd,STDIN_FILENO);
      close(fd);    
      if((res<execl("/usr/bin/ssh","ssh","127.0.0.1",(char*) 0))<0)
    printf("error for execl:%s",strerror(errno));
      break;
    default:   
      exit(0);
      break;
    }

вывод на консоль следующий:
Код

User@Group:~$ [email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Permission denied (publickey,password).

Т.е. выполнение exec упорно игнорирует ввод пароля и соединения по ssh не получается,с файла тоже считывать не хочет.Как можно передать пароль в ssh,чтобы соединение установилось.Ничего придумать не могу,хелп.
PM MAIL   Вверх
MAKCim
Дата 7.4.2009, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



IoganeGambaPuti
протрассируй программу через strace и поймешь в чем дело
Код

# strace -f <your program> 2>strace.log



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
xvr
Дата 7.4.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Переходите на public key authentication. Пароль в ssh вы врядли засуните  smile 

PM MAIL   Вверх
block
Дата 7.4.2009, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 20.12.2006

Репутация: 1
Всего: 1



интересно, а как это expect делает?
PM MAIL   Вверх
xvr
Дата 7.4.2009, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(block @ 7.4.2009,  12:40)
интересно, а как это expect делает?

Судя по всему алокирует терминал, через который и общается с запущенными программами
Так в ssh пароль засунуть можно, но public key aut. гораздо проще (да и с какой то стороны надежнее)


PM MAIL   Вверх
block
Дата 7.4.2009, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 20.12.2006

Репутация: 1
Всего: 1



xvr так никто и не спорит.
автору топика:
считается что наиболее удобный способ взаимодействия с интерактивными программами, это имитация для них терминала.
в expect (при установке потянет тикль) есть libexpect (либа которую можно использовать при написании программ на C/C++).
есть и попроще http://www.sourceforge.net/projects/empty которая позволяет запускать интерактивные программы и вести с ними диалог посредством fifo-файлов, без тикля и прочего.


PM MAIL   Вверх
IoganeGambaPuti
Дата 7.4.2009, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.1.2009

Репутация: нет
Всего: нет



MAKCim,
strace.log :
Код

write(6, "[email protected]\'s password: ", 29) = 29
read(6, "P", 1)                         = 1
read(6, "a", 1)                         = 1
read(6, "s", 1)                         = 1
read(6, "s", 1)                         = 1
read(6, "w", 1)                         = 1
read(6, "o", 1)                         = 1
read(6, "r", 1)                         = 1
read(6, "d", 1)                         = 1
read(6, "!", 1)                         = 1
read(6, "\n", 1)                        = 1
write(6, "\n", 1)                       = 1

Если я правильно понял ,в поле пароля читается по символу.В итоге пароль это:'\n'.

/***********************************************************************************************************************/
block,xvr:
Спасибо,это то что надо.Задача у меня тривиальная,поэтому я ограничился инструментом empty.Вот только,что не понятно:когда устанавливаю ssh соединения вручную в tty,оно устанавливается,но команды мои игнорирует напрочь.А вот скрипт,который лежит в примерах,отрабатывает на ура ,и я даже полазил в Xsession на компьютере друга.
Код

ssh="ssh"                # (/full/path/to/)ssh
target="192.168.0.1"            # target host
login="RemoteMachine"                # username (Change it!)
password="TopSecret"            # password (Change it!)

# -----------------------------------------------------------------------------
cmd="$ssh -X $login@$target"
tmp="/tmp/empty.tmp"            # tempfile to store results

echo "Starting empty"
empty -f -L $tmp $cmd
if [ $? = 0 ]; then
    echo "Sending Password"
    empty -v -w assword: "$password\n"

    echo "Sending tests"
        empty -s << EOF
who am i
id
startkde
EOF
    echo "Check results:"
    sleep 1
    cat $tmp
    rm -f $tmp
else
    echo "Error: Can't start empty in daemon mode"
    return 1
fi

echo "Done"



Это сообщение отредактировал(а) IoganeGambaPuti - 7.4.2009, 18:53
PM MAIL   Вверх
xvr
Дата 8.4.2009, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(IoganeGambaPuti @ 7.4.2009,  18:27)
MAKCim,
strace.log :
Код

write(6, "[email protected]\'s password: ", 29) = 29
read(6, "P", 1)                         = 1
read(6, "a", 1)                         = 1
read(6, "s", 1)                         = 1
read(6, "s", 1)                         = 1
read(6, "w", 1)                         = 1
read(6, "o", 1)                         = 1
read(6, "r", 1)                         = 1
read(6, "d", 1)                         = 1
read(6, "!", 1)                         = 1
read(6, "\n", 1)                        = 1
write(6, "\n", 1)                       = 1

Если я правильно понял ,в поле пароля читается по символу.В итоге пароль это:'\n'.

По символу, но все из них, а не только последний. Где open, который вернул 6й дескриптор?

Цитата

Спасибо,это то что надо.Задача у меня тривиальная,поэтому я ограничился инструментом empty.Вот только,что не понятно:когда устанавливаю ssh соединения вручную в tty,оно устанавливается,но команды мои игнорирует напрочь.А вот скрипт,который лежит в примерах,отрабатывает на ура ,и я даже полазил в Xsession на компьютере друга.

Разумеется, empty делает свой терминал и подсовывает его ssh. Комманды, которые вы пытаетесь ввести, попадают в исходный терминал, и до ssh просто не доходят.

PM MAIL   Вверх
IoganeGambaPuti
Дата 8.4.2009, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.1.2009

Репутация: нет
Всего: нет



  xvr,я их  явно посылаю в empty терминал :
Код

empty -s -o in.fifo MY_COMMAND
 

PM MAIL   Вверх
xvr
Дата 8.4.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(IoganeGambaPuti @ 8.4.2009,  17:55)
xvr,я их  явно посылаю в empty терминал :
Код

empty -s -o in.fifo MY_COMMAND

Напишите целиком ваш скрипт, что то видимо упущено   smile 
PM MAIL   Вверх
MAKCim
Дата 8.4.2009, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(IoganeGambaPuti @  7.4.2009,  18:27 Найти цитируемый пост)
Если я правильно понял ,в поле пароля читается по символу.В итоге пароль это:'\n'.

приведите весь лог


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
IoganeGambaPuti
Дата 9.4.2009, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 13.1.2009

Репутация: нет
Всего: нет



xvr,
Код

~$ empty -f -i /tmp/in.fifo -o /tmp/out.fifo -p empty.pid -L empty.log ssh login@localhost
~$ empty  -w -i /tmp/out.fifo -o /tmp/in.fifo assword 'login_pass\n'

Сессия ssh устанавливается и весит в процессах,но на команды не реагирует,например,
Код

empty -s -o in.fifo "who am i\n"

никакого вывода на консоль не даёт.А если выполнить скрипт (я его чуть выше приводил),то все команды нормально отрабатывают.И who am и id и startkde.
....

MAKCim,
извините,я его уже затёр.Но понятно,что было плохой идеей вводить пароль из файла подменяя поток ввода.

PM MAIL   Вверх
xvr
Дата 9.4.2009, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(IoganeGambaPuti @ 9.4.2009,  19:27)
xvr,
Код

~$ empty -f -i /tmp/in.fifo -o /tmp/out.fifo -p empty.pid -L empty.log ssh login@localhost
~$ empty  -w -i /tmp/out.fifo -o /tmp/in.fifo assword 'login_pass\n'

Сессия ssh устанавливается и весит в процессах,но на команды не реагирует,например,
Код

empty -s -o in.fifo "who am i\n"

никакого вывода на консоль не даёт.

А на консоль и не должно, ищите в /tmp/out.fifo Или через empty -r (или как его там, нету под руками списка опций) 
Или через cat empty.log

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.1065 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.