У меня есть база данных из записей [server, username, password], и мне нужно программно подключиться к этим машинам через SSH, выполнить удаленную команду sudo (установить некоторые приложения, используя apt-get
или что-то еще, доступное на сервере) и получить вывод (exitcode будет приятным, но выход достаточно). Как я могу это сделать с PHP?
sudo немного сложнее, но phpseclib, чистая реализация PHP SSH , упрощает его:
<?php include('Net/SSH2.php'); $sftp = new Net_SSH2('www.domain.tld'); $sftp->login('username', 'password'); echo $sftp->read('username@username:~$'); $sftp->write("sudo ls -la\n"); $output = $sftp->read('#Password:|username@username:~\$#', NET_SSH2_READ_REGEX); echo $output; if (preg_match('#Password:#', $lines)) { $ssh->write("password\n"); echo $sftp->read('username@username:~$'); } ?>
в<?php include('Net/SSH2.php'); $sftp = new Net_SSH2('www.domain.tld'); $sftp->login('username', 'password'); echo $sftp->read('username@username:~$'); $sftp->write("sudo ls -la\n"); $output = $sftp->read('#Password:|username@username:~\$#', NET_SSH2_READ_REGEX); echo $output; if (preg_match('#Password:#', $lines)) { $ssh->write("password\n"); echo $sftp->read('username@username:~$'); } ?>
Я просто копировал / вставлял это из документов phpseclib:
http://phpseclib.sourceforge.net/documentation/net.html#net_ssh_sudo
PHP имеет собственный SSH-клиент (хороший учебник изначально упоминался другим плакатом), но для этого требуется, чтобы у вас есть полномочия на установку и запуск libssh2 под Linux. Мне никогда не приходилось работать под Windows, но я не пробовал через пару лет, так что это может быть проще, чем было.
Когда мне нужно было что-то делать, я использовал phpseclib . Это хороший, надежный пакет с поддержкой SSH и SFTP (он также совместим с PHP4).
Проверьте функцию php exec()
. Попробуйте настроить скрипт bash на SSH с использованием общедоступных / закрытых ключей и сделайте то, что вам нужно, а затем просто выполните скрипт с exec()
в PHP.