Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.
Клиентский доступ на Python к серверу SSH с помощью библиотеки paramiko
Библиотека paramiko не единственная, которая позволяет общаться с сервером SSH. И я ещё о других напишу. Но paramiko действительно хороша. Как говорят: "легка в использовании".
Программа ниже (рисунок 1) показывает как соединиться с ssh-сервером и выполнять на нём команды, получая их результат здесь, у клиента.
Результат выполнения программы (фрагмент)
total 208
drwx-----x 26 admin admin 4096 Sep 14 14:44 .
drwxr-xr-x 4 root root 4096 May 29 2022 ..
-rw------- 1 admin admin 53 Sep 14 13:58 .Xauthority
drwxr-xr-x 4 admin admin 4096 May 29 2022 .apt
-rw------- 1 admin admin 902 Sep 12 19:36 .bash_history
-rw------- 1 admin admin 217 Jul 26 2021 .bash_logout
-rw------- 1 admin admin 259 Jul 26 2021 .bash_profile
-rw------- 1 admin admin 188 Jul 26 2021 .bashrc
drwx------ 15 admin admin 4096 Apr 10 16:34 .cache
drwx------ 19 admin admin 4096 Jun 11 2022 .config
-rw-r--r-- 1 admin admin 23 May 29 2022 .dmrc
drwx------ 3 admin admin 4096 Jun 5 2022 .gnome
-rw------- 1 admin admin 275 Dec 6 2021 .gtkrc-2.0
Пояснения к программе
- Клиент представляет собой объект класса SSHClient.
- Далее определяем политику подключения: set_missing_host_key_policy(), когда выполнятся подключение к серверу, ключ которого неизвестен. Данные строка не обязательна.
- Метод connect() осуществляет непосредственное соединение с сервером. При этом указываются параметры соединения.
- exec_command() - позволяет удалённо выполнять команды и возвращать консольный вывод. В частности переменная cou получает весь консольный вывод, кроме вывода сообщений об ошибках.
- В конце соединение должно быть закрыто. Также обращу внимание на обязательную строку del cl, cin, cou, cer.
Следующая программа показывает как обмениваться файлами между клиентом и сервером SSH по протоколу sftp
Пояснение к программе
- Для обмена файлами нужно создать объект класса paramiko.Transport.
- Далее осуществляется соединение connect().
- наконец создаётся клиент SFTPClient.from_transport(), с помощью которого можно перемещать файлы в обе стороны: get() - с сервера SSH на клиентский компьютер, put() - с клиентского компьютера на SSH сервер.
Ну пока всё!
Пишите свои предложения и замечания, и занимайтесь программированием, а также проектированием баз данных, хотя бы для поддержания уровня интеллекта.