Intereting Posts
Добавление другого суффикса в конец строки Команда Bash внутри файла .gitconfig Восстановление логических томов LVM после восстановления физических томов Определить, какие шрифты были внесены в черный список шрифтом fontff? Как автоматически завершить команду из истории команд? Почему другой пользователь не может получить доступ к моему файлу, когда это полный путь? Как заставить `wget` использовать метод GET для извлечения реквизитов страниц? Как отправить ввод в программу на C с помощью сценария оболочки Файлы рабочего стола Nix Как переустановить USB-накопитель после размонтирования Nautilus без его отсоединения? Разрешить Rygel разговаривать с NetworkManager через DBUS? Помощь в поиске файлов для шаблонов регулярных выражений, рекурсивно, со специализированным выпуском Любая проблема присваивания одной переменной другому в оболочке без использования кавычек? Где я могу найти исходный код libgio? Как работают настройки шрифта в gnome, kde и xfce?

Автоматически вводить пароль SSH без использования SSH-ключа, «ожидать», «sshpass» или Python

У меня есть небольшое устройство, которое запускает крошечную виртуальную машину PowerPC linux, которая мне нужна для SSH из скрипта на крошечной версии Yocto linux. Пароли PowerPC VM SSH остаются неизменными, но он сбрасывает большинство своих основных файлов, включая восстановление своих ssh-ключей, каждый перезапуск.

У установки Yocto linux нет команды «ожидать», и она не может установить «sshpass». Он имеет чрезвычайно ограниченную версию Python.

Я хотел бы иметь возможность выполнить требование пароля из основного приглашения 'ssh', используя только скрипт оболочки. Это возможно?

Предполагая, что вам нужен скрипт, который отправит пароль удаленному при входе через ssh, вот какой-то очень минимальный код на Python, который не нуждается в дополнительных библиотеках и так далее. Очевидно, что это всего лишь пример того, что возможно, используя только os forkpty execlp read write.

#!/usr/bin/python # simplest builtin python pseudo-tty for ssh password. meuh # http://unix.stackexchange.com/a/276385/119298 import os def run(cmd,*args): pid, fd = os.forkpty() if pid==0: # child os.execlp(cmd,*args) while True: data = os.read(fd,1024) print data if "password:" in data: # ssh prompt os.write(fd,"mypassword\n") elif data.endswith("$ "): # bash prompt for input os.write(fd,"echo hello\n") os.write(fd,"echo bye\n") os.write(fd,"exit\n") run("ssh", "ssh", "user@remote") 

Обратите внимание: вам нужно дать «ssh» дважды, один раз для argv [0].