LINUX.ORG.RU

программный ввод пароля в ssh


0

3

Привет. Хочу сделать програмулинку, чтобы отключать все компы в сети. Сделал


#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <sys/types.h>
#include <fcntl.h>

int main(void) 
{
	char *cmd[] = { "/usr/bin/ssh administrator@192.168.1.1",  0 };

	FILE *pipe_writer=NULL;

	if (fork())
	{
		pipe_writer=popen(cmd[0] ,"w");
	}else
	{
		sleep(5);
		fputs("password", pipe_writer);
	}
	pclose(pipe_writer);
	return 0;
}

не работает (пароль не передаётся в ssh). подскажите, куда копать?


Ответ на: комментарий от ananas

ananas> про ключи вроде уже говорили, тс уперся рогом

ТС просто не знает про ssh-agent и что ключ надо делать с паролем, а перед использованием выполнять ssh-add

sdio ★★★★★
()
Ответ на: комментарий от ananas

Если сеть отвалится, то и никакой другой способ удаленного выключения не поможет :)

Eddy_Em ☆☆☆☆☆
()

зачем писать на сях то что можно сделать в три строчки на баше ?

ТС срочно сдать в рабство на пару лет в нормальную серверную.

MikeDM ★★★★★
()

у меня масса автоматизации через ssh сделана, но везде по парам ключей

Hokum ☆☆☆☆
()
Ответ на: комментарий от mky

От случайных пакетов защищает read cmd и сравнение с poweroff

rymis ★★
()
Ответ на: комментарий от Eddy_Em

Тем не менее это лучше чем рассказать всем свой рутовый пароль. А именно это предлагает TC. Кстати никто не мешает сделать какую-нибудь авторизация, кроме того можно проверять удаленный IP.

rymis ★★
()
Ответ на: комментарий от rymis

Все-таки, есть ssh, а все остальные способы уж очень велосипедны.

Можно вообще извратиться: раз в n секунд wget'ом скачивать с сервера файлик и проверять его на наличие слова, скажем, poweroff. Если слово есть - отключаться.

Но этот велосипед не лучше мониторинга nfs.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

> Все-таки, есть ssh, а все остальные способы уж очень велосипедны.

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

ananas ★★★★★
()
Ответ на: комментарий от ananas

Добавляем пользователя poweroff, обладающего правами запуска утилит poweroff и reset, делаем авторизацию по ключам в ssh и запускаем ssh poweroff@comp poweroff (или вообще, как предлагалось выше, делаем этому пользователю poweroff оболочкой по умолчанию).

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

вообще, я и предлагал. походу, более удачным будет решение с пользователем poweroff, обычный шелом, разрешением ему запускать poweroff через sudo и прописыванием для этого пользователя в конфиге sshd - ForceCommand /usr/sbin/sudo /sbin/poweroff

ananas ★★★★★
()
Ответ на: комментарий от ananas

>более забавный вариант - добавить беспарольного пользователя с шелом /sbin/poweroff и логиниться под ним

это самая изысканая падла, которую можно придумать :)

надо будет взять на вооружение ))))

Deleted
()

ssh читает пароль или с tty, или надо писать аналог ssh-askpass или как его там.

Ну или по ключу.

sergej ★★★★★
()

Если тебя еще не переубедили использовать беспарольные варианты (public key, kerberos) и скриптовые языки, то копай в сторону libssh.

fopen ★★
()
Ответ на: комментарий от ananas

> добавить беспарольного пользователя с шелом /sbin/poweroff и логиниться под ним

OMG make me unsee it!

val-amart ★★★★★
()
Ответ на: комментарий от ananas

Ну, вообще-то скрипт, содержащий вызов sudo poweroff можно в качестве оболочки прописать. Так что, различия должны быть не в этом.

anonymous
()
Ответ на: комментарий от ananas

У этой задачи есть несколько хороших решений. Выбор будет зависеть от того, какой вид организации деятельности предусмотрен в классе.

Вот один из вариантов.

Выделим роли: администратор ОС, администратор учебного процесса класса, администратор информационной безопасности класса, оператор класса, ученик. Не заморачиваясь с ACL, создадим по группе для каждой роли.

Определим для каждого зону ответственности: так, право выключать компьютер останется у администратора ОС, и оператора класса. Но оператор класса получит возможность ещё что-то делать на компьютере, скажем - мониторить чего-нибудь. Все эти возможности добавим в список sudo для операторов, если необходимо.

Так, оператор сможет залогиниться под своей учеткой на каждой машине (используем nis аутенификацию, и nfs для домашних директорий) и выполнить дозволенные действия, возможно - удалённо, залогинившись по ssh по ключу. В том числе - и остановить машину. А для того, чтоб автоматизировать процесс, создадим скрипт, делающий это в цикле, что-то типа

name=`id --user --name`

for i in ALL_COMPUTERS_IN_CLASS; do ssh «$name»@«$i» stop_script ; done

Запускать его сможет любой оператор с учительского компьютера, или root. Это можно тоже решить, но лучше внешне, не в этом скрипте.

В этой картине нет места пользователю, предназначенному только для выключения компа. В других способах организации работы - решение будет свое. Т.е. лучше, если решение берется не откуда-нибудь а из того, как организован рабочий процесс в классе.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.