#!/sbin/sh
print "Enter password for root"
read pass
echo $pass
ssh root@server < $passне работает. Подскажите как мне зайти таким способом, чтобы пароль вписывал я, а потом его использовать в скрипте для соединения по ssh. Это надо, чтоб N-ом кол-ве серверов с одинаковыми паролями вводить пароль только один раз. дальше все это будет в цикле итд, но сама процедура коннекта по паролю в переменной у меня не работает. Expect не подойдет.
>[оверквотинг удален]
> 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
>[оверквотинг удален]
>> 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:а он не должен был запрашивать пароль
У меня есть только
SHELL=/usr/bin/kshИ я могу использовать только
#!/sbin/shжопа, но вот как то так(
> У меня есть только
> 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
Не забыть выставить в 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
>> не подойдет.Вот ещё так (примерно - если правильно вспомнил) попробуй:
$ cat <<EEE >~/secret_pass
#!/bin/shecho "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И да, по ключу проще, чем без баша и без экспекта (да, и с ним, тоже...) кувыркаться.
>[оверквотинг удален]
> print "Enter password for root"
> read pass
> echo $pass
> ssh root@server < $pass
> не работает. Подскажите как мне зайти таким способом, чтобы пароль вписывал я,
> а потом его использовать в скрипте для соединения по ssh. Это
> надо, чтоб N-ом кол-ве серверов с одинаковыми паролями вводить пароль только
> один раз. дальше все это будет в цикле итд, но сама
> процедура коннекта по паролю в переменной у меня не работает. Expect
> не подойдет.чем не подходит схема авторизации по ключам?
примеры: http://habrahabr.ru/post/122445/
условия такие
есть только:
SHELL=/usr/bin/ksh
И я могу использовать только
#!/sbin/sh
менять в ос ничего нельзя. устанавливать что-то тоже нельзя. только этим штатными средствами.
схема по ключам мне не устраивает тем, что для этого надо с начало создать эти самые ключи на всех серверах. мне надо чтобы я сам ключ вводил, но походу придется все таки руками вводить(
> условия такие
> есть только:
> SHELL=/usr/bin/ksh
> И я могу использовать только
> #!/sbin/sh
> менять в ос ничего нельзя. устанавливать что-то тоже нельзя. только этим штатными
> средствами.
> схема по ключам мне не устраивает тем, что для этого надо с
> начало создать эти самые ключи на всех серверах. мне надо чтобы
> я сам ключ вводил, но походу придется все таки руками вводить(Ну если уж минималистический Bourne shell (bin/sh) не подходит, значит не судьба. ))
> Ну если уж минималистический Bourne shell (bin/sh) не подходит, значит не судьба.
> ))ну я просто не вижу тут ни одного совета который бы не использовал другой софт.
у тебя есть пример на bin/sh для первого поста???
>> Ну если уж минималистический Bourne shell (bin/sh) не подходит, значит не судьба.
>> ))
> ну я просто не вижу тут ни одного совета который бы не
> использовал другой софт.
> у тебя есть пример на bin/sh для первого поста???Это был сарказм.
Пост 7 пробовали?
С другой стороны, интерпретатор ksh Korn совместим с Bourne снизу вверх.
извините недопонимание.
от 7 поста мне выдает ошибку
setsid: not found.
тот пункт тоже включает доп софт, а именно gcc компиляцию или готовый setsid у меня нету такой роскоши. Поэтому вопрос таким способом решить не удалось.
> извините недопонимание.
> от 7 поста мне выдает ошибку
> setsid: not found.
> тот пункт тоже включает доп софт, а именно gcc компиляцию или готовый
> setsid у меня нету такой роскоши. Поэтому вопрос таким способом решить
> не удалось.Скомпилить на стороне и скопировать на рабочую систему?
Тоже нет? Ну, так я же говорю, не судьба.
> Скомпилить на стороне и скопировать на рабочую систему?
> Тоже нет? Ну, так я же говорю, не судьба.вопрос не тему:если я скомпилю у себя дома на пеньке эту штуку заработает ли она на hp-ux на ia64 pa-risc вые процы
>> Скомпилить на стороне и скопировать на рабочую систему?
>> Тоже нет? Ну, так я же говорю, не судьба.
> вопрос не тему:если я скомпилю у себя дома на пеньке эту
> штуку заработает ли она на hp-ux на
> ia64 pa-risc вые процыЯ тут некопенгаген. Спецы и кто в теме если захотят подскажут как.
Там свои тонкости и нюансы есть. Теоретически должно запуститься. Или одно из двух.
>> штуку заработает ли она на hp-ux на ia64 pa-risc вые процыТак PA-RISC или IA64? Это если что - разные вещи :)
> Теоретически должно запуститься.
Охни*%$себе! А можно услышать эту теорию? Ну чиста поржать?
>>> штуку заработает ли она на 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 и проверить теорию на практике.
Вопрос ему надо решить ГДЕ скомпилировать.> Охни*%$себе! А можно услышать эту теорию? Ну чиста поржать?
На аналогичное глумление здесь уже отправляли ... в стойло, ржать там.
> #!/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, вагон их. [Заметить по пути, что исполнялки эти ещё и срабатывать будут на разных серверах через раз.] Дальше - всяческие кластерные [доменые?] прибамбасы, удалённые управлялки, запускалки задач и проч.менеджмент, наверное...
То есть исходная задача решаема, конечно, но постановка, скорее всего, неверна.
> раскладывать _этот _пароль в скриптах
> открытым текстом - точно безобразие.Можно и без безобразия.))
#!/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
Но это уже офтопик.
я не смог найти HP-UX да еще с gcc в комплекте. если попробовать на BSD скачать и скомпилировать hp-ux скушает бинарник? нет возможности бесплатно скачать ОС , трафик платный, поэтому с начало спрашиваю.
> я не смог найти HP-UX да еще с gcc в комплекте. если
> попробовать на BSD скачать и скомпилировать hp-ux скушает бинарник? нет возможности
> бесплатно скачать ОС , трафик платный, поэтому с начало спрашиваю.google://hpux cross-compile gcc
и гугле-транслаите для прискорбных языком позикс-профессионалов.
Скомпилил это дело на freebsd x64. HP-UX ругается. в обещм никак а до кросплатформенного решения я пока не дочитал маны. жаль. но все равно всем спасибо.