Я использую phpseclib и мне нужно создать пару функций php, которые позволят кому-то программно подключиться к ssh на свой сервер и изменить пароль root, а также изменить пароль пользователя, который, возможно, забыл своипароль (поэтому необходимо войти в систему как root).
Я пытался использовать libssh2, но нашел его немного неприятным для использования.Сейчас я смотрю на phpseclib, который кажется более надежным.Но когда я пытался использовать команду 'su' следующим образом:
echo $ssh->exec('su');
, я получаю ответ:
su: must be run from a terminal
и когда я пытаюсь использовать sudo:
echo $ssh->exec('sudo passwd root');
Я получаю сообщение об ошибке:
sudo: no tty present and no askpass program specified
В любом случае оказывается, что su отключен для прямого доступа по ssh, но после просмотра этой статьи получаетсяВы можете сделать это с помощью следующей команды:
ssh -t -t -l 'username' 'host' 'su -'
Это то, что, в конце концов, сработало для меня, когда я вошел в терминал с моего ноутбука (работает на Ubuntu), а затем я ввел свой пароль, а затем пароль root дляконец.
Цитирование с сайта, на который ссылаются выше:
Команды Ssh (с помощью -t) удаленного sshd для установления канала псевдо-терминала для рабочего процесса, когда-т дается.
.ssh делает это до тех пор, пока его стандартный ввод является терминалом.
.Но если ssh stdin не является терминалом, ssh не будет указывать sshd установить псевдотерминал
, если не задано ДВА-t:
echo password |ssh -t -t -l username удаленный_хост
.Таким образом, с помощью -t -t (из ssh) sshd устанавливает псевдо-терминал для клиентского процесса.
.Клиент, будь то 'tty' или 'su', не может сказать, что он подключен к фиктивному> терминалу:
echo dummystr |ssh -t -t -l username host.com -c '' tty '
пароль эха |ssh -t -t -l username host.com -c 'su -'
Итак, ответ есть.Используйте double -t, если вы 'su root'ing' на компьютере с Linux через> интерактивный клиент ssh, подобный OpenBSD.
Итак, на самом деле он работал с терминала, как я сказал вышеиспользуя:
ssh -t -t -l 'username' 'host' 'su -'
но я действительно хочу иметь возможность выполнить эту команду с помощью phpseclib.Единственное, что я не знаю, как вставить какие-либо флаги в функцию exec ().В частности, мне нужно указать флаги -t (дважды).
Я искал целую вечность и не могу ничего найти.Будьте очень благодарны за помощь в этом.Извините за длину этого поста, а также.:)
Ура
Джо