Задать вопрос
swanrnd
@swanrnd
Издатель HTML5 игр

Подсоединиться по SSH и поменять пароль?

В общем есть такая задача. Есть панель администратора, в которой есть функционал смена пароля пользователя.


Идея такая: вызываем из под PHP скрипт, который логинится по SSH к серверу под рутом и меняет пароль пользователя. Пароль рута мы знаем.


От моего предшественника достался такой код:
#!/usr/bin/expect
set USER [lindex $argv 0]
set PASS [lindex $argv 1]
set HOST [lindex $argv 2]

spawn ssh root@$HOST

expect "word:"
send "123456\r"
expect "$*"
send "echo \"$USER:$PASS\" | chpasswd  \r"
send "exit\r"
expect eof


Вызывается с помощью PHP так:
system("./do.py ".$user." ".$new_password." ".$did->did);



Выше приведенный код не работает, возможно проблема в некорректной обработки expect.


И мне кажется есть более нормальный вариант смены пароля. К сожалению ставить доп. софт и библиотеки на сервер и клиентов не могу. Я не могу что либо закидывать на остальные ПК, даже файлы ключей.

Как лучше всего соединиться с сервером и поменять пароль?
  • Вопрос задан
  • 15376 просмотров
Подписаться 5 Оценить 4 комментария
Решения вопроса 1
Stdit
@Stdit
Теоретически, можно уменьшить количество лишних сущностей, если передать всю команду одной строкой.
Как-то так (пароли заслэшить):
ssh user@host 'echo -e "password\npassword" | passwd username
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
alexxxst
@alexxxst
Какая-то дикая жесть…

$connection = ssh2_connect($server_host, 22);
if(ssh2_auth_password($connection, $login, $password)){
        $stdio = ssh2_exec($connection, $command);
        stream_set_blocking($stdio, 1);
}


Обработать ошибки и сочинить $command сможете?
Ответ написан
@BasilioCat
Можете попробовать заменить этот скрипт на expect на утилиту sshpass (придется поставить дополнительно)
sshpass -p password ssh root@host «echo user1:passwd1 | chpass»
из соображений безопасности лучше пароль передавать через файл или переменную окружения (такая возможность есть)

Ну а правильный метод (который и рекомендовали выше) — сгенерить ключ
ssh-keygen
и пройтись по всем серверам (раз уж пароль рута вам известен), и вписать этот ключ для доступа через ssh
cat /root/.ssh/id_rsa.pub | ssh root@host «cat >> /root/.ssh/authorized_keys»
после чего вы будете ходить по всем серверам без пароля
Ответ написан
Комментировать
@mcleod095
ну для смены пароля в sh скриптах я бу не рекомендовал использовать команду passwd
лучше использовать команду chpasswd
echo «user:password» | chpasswd
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы