The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Передать в ssh пароль в качестве переменной"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Shell скрипты)
Изначальное сообщение [ Отслеживать ]

"Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma email(ok) on 26-Июл-13, 15:30 
#!/sbin/sh
print "Enter password for root"
read pass
echo $pass
ssh  root@server < $pass

не работает. Подскажите как мне зайти таким способом, чтобы пароль вписывал я, а потом его использовать в скрипте для соединения по ssh. Это надо, чтоб N-ом кол-ве серверов с одинаковыми паролями вводить пароль только один раз. дальше все это будет в цикле итд, но сама процедура коннекта по паролю в переменной у меня не работает. Expect не подойдет.


Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от pavel_simple (ok) on 26-Июл-13, 15:37 
>[оверквотинг удален]
> print "Enter password for root"
> read pass
> echo $pass
> ssh  root@server < $pass
> не работает. Подскажите как мне зайти таким способом, чтобы пароль вписывал я,
> а потом его использовать в скрипте для соединения по ssh. Это
> надо, чтоб N-ом кол-ве серверов с одинаковыми паролями вводить пароль только
> один раз. дальше все это будет в цикле итд, но сама
> процедура коннекта по паролю в переменной у меня не работает. Expect
> не подойдет.

bash

(sleep 5;echo password;sleep 5;id) | ssh user@host

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma email(ok) on 26-Июл-13, 15:44 
>[оверквотинг удален]
>> echo $pass
>> ssh  root@server < $pass
>> не работает. Подскажите как мне зайти таким способом, чтобы пароль вписывал я,
>> а потом его использовать в скрипте для соединения по ssh. Это
>> надо, чтоб N-ом кол-ве серверов с одинаковыми паролями вводить пароль только
>> один раз. дальше все это будет в цикле итд, но сама
>> процедура коннекта по паролю в переменной у меня не работает. Expect
>> не подойдет.
> bash
> (sleep 5;echo password;sleep 5;id) | ssh user@host

не совсем понял, как это работает, но на выходе всегда одно и то-же
Pseudo-terminal will not be allocated because stdin is not a terminal
Password:

а он не должен был запрашивать пароль

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma email(ok) on 26-Июл-13, 15:59 
У меня есть только
SHELL=/usr/bin/ksh

И я могу использовать только
#!/sbin/sh

жопа, но вот как то так(

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

5. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 26-Июл-13, 21:03 
> У меня есть только
> SHELL=/usr/bin/ksh
> И я могу использовать только
> #!/sbin/sh
> жопа, но вот как то так(

Perl не спасёт отца русской демократии?

#!/usr/bin/perl

use warnings;
use strict;
use Net::SSH::Perl;

my $host = 'x.x.x.x';
my $user = 'user';
my $cmd  = 'pwd';

my $ssh = Net::SSH::Perl->new($host);
print "Enter pass: ";
my $pass = <STDIN>;
chomp $pass;
$ssh->login($user, $pass) or die "Kiss my ass! $!";
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
print "\n" . $exit . "\n";
print "\n" . $stderr . "\n";
print "\n" . $stdout . "\n";

P.S. Не забыть выставить в sshd_config
PasswordAuthentication yes

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

7. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 27-Июл-13, 12:32 
Не забыть выставить в sshd_config
PasswordAuthentication yes

#!/usr/bin/perl

use warnings;
use strict;
use Net::SSH::Perl;

my $host = 'x.x.x.x';
my $user = 'user';
my $cmd  = 'pwd';

my $ssh = Net::SSH::Perl->new($host);
print "Enter pass: ";
my $pass = <STDIN>;
chomp $pass;
$ssh->login($user, $pass) or die "Kiss my ass! $!";
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
print $stdout."\n";
print $stderr."\n" if defined $stderr;
print $exit."\n";

Так правильней, иначе плюётся на undef $stderr

Самому стало интересно, поискал, нашёл. ))
Вот выжимка.

#!/bin/sh

# remote host
HOST="x.x.x.x"

# user on remote host
USER="user"

TMP="/tmp"


out() {
    echo -e "$@"
}

read_pass() {
    out "Enter password for $USER on $HOST (will not echo): "
    stty -echo
    read PASS
    stty echo
    if [ -z "$PASS" ]; then
        error "\n No password entered!"
    fi
}

create_askpass() {
    TMP=$(mktemp /tmp/$USER$HOST.XXXXXXXXXX) || $TMP="/tmp/$USER$HOST.$$"
    if [ -z "$DISPLAY" ]; then
        export DISPLAY=":0.0"
    fi
    out "#!/bin/sh\necho '$PASS'" > $TMP
    chmod 500 $TMP
    export SSH_ASKPASS=$TMP
}

cleanup() {
    $(which rm) -f $TMP
}

main() {
    read_pass
    create_askpass
    setsid ssh $USER@$HOST "ls -1"
    cleanup
}

main "$@"


Источники:
http://www.linuxforums.org/forum/programming-scripting/10780...
http://andre.frimberger.de/index.php/linux/reading-ssh-passw.../
http://alexandr.sysoev.ru/node/136
http://pentestmonkey.net/blog/ssh-with-no-tty
http://www.nuclearcat.com/mediawiki/index.php/Ssh_askpass
http://superuser.com/questions/393506/can-i-automatically-lo...

Ложка дёгтя.
Во FreeBSD нет штатного setsid - для создания нового сеанса.
Но мир не без добрых людей.
http://freebsd.1045724.n5.nabble.com/setsid-not-found-on-fre...
http://lists.freebsd.org/pipermail/freebsd-hackers/2011-Febr...
Сцылки бывают дохнут, поэтому сюда скопипастю, на всякий случай.))

cat setsid.c

/*
* setsid.c -- execute a command in a new session
* Rick Sladkey <jrs@world.std.com>
* In the public domain.
*
* 1999-02-22 Arkadiusz Mi¶kiewicz <misiek@pld.ORG.PL>
* - added Native Language Support
*
* 2001-01-18 John Fremlin <vii@penguinpowered.com>
* - fork in case we are process group leader
*
* 2011-02-14 Jason J. Hellenthal <jhell@DataIX.net>
* - removed nls support for this simple command.
*
*/

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

#define _(Text) (Text)

int
main(int argc, char *argv[]) {
    
    if (argc < 2) {
        fprintf(stderr, _("usage: %s program [arg ...]\n"),
            argv[0]);
        exit(1);
    }
    if (getpgrp() == getpid()) {
        switch(fork()){
        case -1:
            perror("fork");
            exit(1);
        case 0:        /* child */
            break;
        default:    /* parent */
            exit(0);
        }
    }
    if (setsid() < 0) {
        perror("setsid"); /* cannot happen */
        exit(1);
    }
    execvp(argv[1], argv + 1);
    perror("execvp");
    exit(1);
}

gcc -O2 -o setsid setsid.c

Работает.
P.S.
или port
/usr/ports/net/nxproxy/files/setsid.c

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

6. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Andrey Mitrofanov on 26-Июл-13, 23:58 
>> не подойдет.

Вот ещё так (примерно - если правильно вспомнил) попробуй:

$ cat <<EEE >~/secret_pass
#!/bin/sh

echo "ZupperPassWorrd"
EEE
$ chmod +x ~/secret_pass
$ SSH_ASKPASS=~/secret_pass ssh remote.host $THE_COMMAND _

google://SSH_ASKPASS


> bash
> (sleep 5;echo password;sleep 5;id) | ssh user@host

И да, по ключу проще, чем без баша и без экспекта (да, и с ним, тоже...) кувыркаться.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от oraerkx on 26-Июл-13, 16:36 
>[оверквотинг удален]
> print "Enter password for root"
> read pass
> echo $pass
> ssh  root@server < $pass
> не работает. Подскажите как мне зайти таким способом, чтобы пароль вписывал я,
> а потом его использовать в скрипте для соединения по ssh. Это
> надо, чтоб N-ом кол-ве серверов с одинаковыми паролями вводить пароль только
> один раз. дальше все это будет в цикле итд, но сама
> процедура коннекта по паролю в переменной у меня не работает. Expect
> не подойдет.

чем не подходит схема авторизации по ключам?
примеры: http://habrahabr.ru/post/122445/

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

8. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma email(ok) on 27-Июл-13, 16:31 
условия такие
есть только:
SHELL=/usr/bin/ksh
И я могу использовать только
#!/sbin/sh
менять в ос ничего нельзя. устанавливать что-то тоже нельзя. только этим штатными средствами.
схема по ключам мне не устраивает тем, что для этого надо с начало создать эти самые ключи на всех серверах. мне надо чтобы я сам ключ вводил, но походу придется все таки руками вводить(
Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

9. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 27-Июл-13, 16:47 
> условия такие
> есть только:
> SHELL=/usr/bin/ksh
> И я могу использовать только
> #!/sbin/sh
> менять в ос ничего нельзя. устанавливать что-то тоже нельзя. только этим штатными
> средствами.
> схема по ключам мне не устраивает тем, что для этого надо с
> начало создать эти самые ключи на всех серверах. мне надо чтобы
> я сам ключ вводил, но походу придется все таки руками вводить(

Ну если уж минималистический Bourne shell (bin/sh) не подходит, значит не судьба. ))

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma email(ok) on 27-Июл-13, 16:53 
> Ну если уж минималистический Bourne shell (bin/sh) не подходит, значит не судьба.
> ))

ну я просто не вижу тут ни одного совета который бы не использовал другой софт.
у тебя есть пример на bin/sh для первого поста???

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 27-Июл-13, 17:06 
>> Ну если уж минималистический Bourne shell (bin/sh) не подходит, значит не судьба.
>> ))
> ну я просто не вижу тут ни одного совета который бы не
> использовал другой софт.
> у тебя есть пример на bin/sh для первого поста???

Это был сарказм.
Пост 7 пробовали?
С другой стороны, интерпретатор ksh Korn совместим с Bourne снизу вверх.

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma email(ok) on 27-Июл-13, 17:42 
извините недопонимание.
от 7 поста мне выдает ошибку
setsid:  not found.
тот пункт тоже включает доп софт, а именно gcc компиляцию или готовый setsid у меня нету такой роскоши. Поэтому вопрос таким способом решить не удалось.
Ответить | Правка | ^ к родителю #11 | Наверх | Cообщить модератору

13. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 27-Июл-13, 18:06 
> извините недопонимание.
> от 7 поста мне выдает ошибку
> setsid:  not found.
> тот пункт тоже включает доп софт, а именно gcc компиляцию или готовый
> setsid у меня нету такой роскоши. Поэтому вопрос таким способом решить
> не удалось.

Скомпилить на стороне и скопировать на рабочую систему?
Тоже нет? Ну, так я же говорю, не судьба.

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от shinma on 27-Июл-13, 18:15 

> Скомпилить на стороне и скопировать на рабочую систему?
> Тоже нет? Ну, так я же говорю, не судьба.

вопрос не тему:если я скомпилю у себя дома на пеньке эту штуку заработает ли она на  hp-ux  на      ia64 pa-risc вые процы

Ответить | Правка | ^ к родителю #13 | Наверх | Cообщить модератору

15. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 27-Июл-13, 18:20 
>> Скомпилить на стороне и скопировать на рабочую систему?
>> Тоже нет? Ну, так я же говорю, не судьба.
>  вопрос не тему:если я скомпилю у себя дома на пеньке эту
> штуку заработает ли она на  hp-ux  на  
>    ia64 pa-risc вые процы

Я тут некопенгаген. Спецы и кто в теме если захотят подскажут как.
Там свои тонкости и нюансы есть. Теоретически должно запуститься. Или одно из двух.

Ответить | Правка | ^ к родителю #14 | Наверх | Cообщить модератору

17. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Аноним (??) on 27-Июл-13, 23:50 
>> штуку заработает ли она на  hp-ux  на ia64 pa-risc вые процы

Так PA-RISC или IA64? Это если что - разные вещи :)

> Теоретически должно запуститься.

Охни*%$себе! А можно услышать эту теорию? Ну чиста поржать?

Ответить | Правка | ^ к родителю #15 | Наверх | Cообщить модератору

18. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 28-Июл-13, 04:51 
>>> штуку заработает ли она на  hp-ux  на ia64 pa-risc вые процы
> Так PA-RISC или IA64? Это если что - разные вещи :)

Замечательно, что вы знаете отличительные особенности этих "разных вещей".
>> Теоретически должно запуститься.

Но в данном контексте для ТС гораздо важней знать, то, что поскольку скомпилированный исполняемый setsid является не более чем небольшой оберткой вокруг системного вызова setsid, доступен ли это системный вызов на его "hp-ux  на ia64 pa-risc вых процах"
Если да, то скомпилировать аскетичный (всего с одним инклюдом) setsid.c
#include <unistd.h>
int main(int argc,char** argv)
{
    setsid();
    execvp(argv[1], argv+1);
    return 0;
}
перекинуть blob и проверить теорию на практике.
Вопрос ему надо решить ГДЕ скомпилировать.

> Охни*%$себе! А можно услышать эту теорию? Ну чиста поржать?

На аналогичное глумление здесь уже отправляли ... в стойло, ржать там.

Ответить | Правка | ^ к родителю #17 | Наверх | Cообщить модератору

16. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Andrey Mitrofanov on 27-Июл-13, 21:18 
> #!/sbin/sh
> print "Enter password for root"
> read pass
> echo $pass
> ssh  root@server < $pass
> не работает. Подскажите как мне зайти таким способом, чтобы пароль вписывал я,
> а потом его использовать в скрипте для соединения по ssh. Это
> надо, чтоб N-ом кол-ве серверов с одинаковыми паролями вводить пароль только
> один раз

Вообще, дурацкая идея ходить root-ом по ssh. Ну, может и не такая дурацкая. Но вот ходить root-ом на по ssh много серверов c _одним паролем -- точно от несообразительности. Но даже если и этому можно представить применение, то ещё и раскладывать _этот _пароль в скриптах открытым текстом - точно безобразие.

Я на серверы вхожу _своим логином и по ключу (агент на лок.машине, ввести пароль 1 раз) по ssh, дальше [gnu screen, дальше] по sudo (группа wheel и т.п.) с вводом _моего пароля - шел root-а. Потом-потом детач screen-а, отключение от ssh. В след.раз - вход по ssh (по ключу), приатачивание к "уже готовому" screen (с root шелом в т.ч.). И это тоже, наверное, безобразие -- для кого-то...

Если нужно исполнять _одинаковые команды многократно под root-ом, то, наверное, нужно их выписывать по одной (и с полной ком.строкой, по возможности, и, по возможности же, без изменений вообще - только чтение) в sudo. Исполнение на ку-у-уче серверов - это вообще спорт такой = кто во что горазд. Посмотри в гуглях какой-нибудь gnu parallel или всяческие наколеночные параллельные ssh, вагон их. [Заметить по пути, что исполнялки эти ещё и срабатывать будут на разных серверах через раз.] Дальше - всяческие кластерные [доменые?] прибамбасы, удалённые управлялки, запускалки задач и проч.менеджмент, наверное...

То есть исходная задача решаема, конечно, но постановка, скорее всего, неверна.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

19. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от михалыч (ok) on 28-Июл-13, 06:34 
> раскладывать _этот _пароль в скриптах
> открытым текстом - точно безобразие.

Можно и без безобразия.))

#!/bin/sh

if [ -n "$SSH_ASKPASS_" ]; then
     echo "$SSH_ASKPASS_"
else
    stty -echo
    read SSH_ASKPASS_
    stty echo
    export SSH_ASKPASS=$0
    export SSH_ASKPASS_
    export DISPLAY=:0
    setsid $@
fi

Запускать так: ssh user@x.x.x.x ls -1
Но это уже офтопик.

Ответить | Правка | ^ к родителю #16 | Наверх | Cообщить модератору

20. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma (ok) on 28-Июл-13, 17:11 
я не смог найти HP-UX да еще с gcc в комплекте. если попробовать на BSD скачать и скомпилировать hp-ux скушает бинарник? нет возможности бесплатно скачать ОС , трафик платный, поэтому с начало спрашиваю.
Ответить | Правка | ^ к родителю #19 | Наверх | Cообщить модератору

21. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Andrey Mitrofanov on 28-Июл-13, 17:24 
> я не смог найти HP-UX да еще с gcc в комплекте. если
> попробовать на BSD скачать и скомпилировать hp-ux скушает бинарник? нет возможности
> бесплатно скачать ОС , трафик платный, поэтому с начало спрашиваю.

google://hpux cross-compile gcc

и гугле-транслаите для прискорбных языком позикс-профессионалов.

Ответить | Правка | ^ к родителю #20 | Наверх | Cообщить модератору

22. "Передать в ssh пароль в качестве переменной"  +/
Сообщение от Shinma email(ok) on 29-Июл-13, 08:06 
Скомпилил это дело на freebsd x64. HP-UX ругается. в обещм никак а до кросплатформенного решения я пока не дочитал маны. жаль. но все равно всем спасибо.
Ответить | Правка | ^ к родителю #21 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру