Захват stdout из сеанса ssh на локальную машину

Мне нужно собрать скрипт, который будет ssh в устройствах для запуска команды, такой как «show running-config», и сохранить вывод в файл на моей локальной машине. Я выполнил аналогичные задачи, подобные этому прямо из командной строки, и сохранил файл в моей локальной системе. Например,

ssh test@192.168.142.15 ls > ls_from_remotes_sys 

И файл ls_from_remotes_sys находится в моей локальной системе. Тем не менее, мне нужно будет создать скрипт, и единственный способ, которым я знаю, как это сделать, – это ожидать. Поэтому я собрал это:

 #!/usr/bin/expect -f spawn ssh test@192.168.142.15 ls > ls_from_remotes_sys expect "test@192.168.142.15's password:" send "password\r" interact 

Сценарий ожидания работает, но файл сохраняется в удаленной системе, чего я не хочу.

Вопрос 1: Почему файл будет сохранен в локальной системе из командной строки и почему он будет сохранен в удаленной системе с ожиданием?

Вопрос 2: Есть ли способ отправить файл в мою локальную систему? (ssh назад не вариант)

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

Вопрос 3. Если я это сделаю, как я могу записать stdout на своем экране из удаленной системы и отправить его в файл в локальной системе?

One Solution collect form web for “Захват stdout из сеанса ssh на локальную машину”

Команда expect вы используете:

 spawn ssh test@192.168.142.15 ls > ls_from_remotes_sys 

Это эффективно

 exec("ssh","test@192.168.142.15","ls",">","ls_from_remotes_sys") 

Это означает, что три параметра ( ls , > и имя файла) отправляются в удаленную систему; т.е. перенаправление происходит в удаленной системе.

Kludge можно было бы назвать его через sh -c "ssh test@...." .

Другой альтернативой было бы перенаправление, выполняемое вне сценария expect

например, если вы назвали этот «get_ls»

 #!/usr/bin/expect -f spawn ssh test@192.168.142.15 ls expect "test@192.168.142.15's password:" send "password\r" interact 

Тогда вы можете сделать get_ls > ls_from_remotes_sys .

  • Может ли написать stdout место противодавления в процессе?
  • Команда, которая генерирует как стандартную ошибку, так и вывод
  • Как сделать скрытые команды оболочки невидимыми?
  • Каково поведение отмененного процесса над SSH, записывающего stdout, когда сеанс SSH теряется?
  • Выполнять команду в удаленном активном терминале
  • Как программы с программным обеспечением с оболочкой уравновешивают скорость вывода / ввода?
  • Труба не поднимает stdout
  • `docker logs foo | less` не доступен для поиска или прокрутки, но `docker logs foo 2> & 1 | меньше` является
  • Могу ли я читать и писать в тот же файл в Linux, не перезаписывая его?
  • Почему `cat`ing файл в себя стирает его?
  • Команда для вывода содержимого файла в stdout?
  • Interesting Posts

    Как передать аргумент с char (в удаленном пути?

    создание нового модуля, карта

    Как обновить программное обеспечение, которое было создано из источника?

    Как включить комбинации клавиш управления для экрана GNU на шпатлевке?

    Файл Doom замораживает любой компьютер, который пытается взаимодействовать

    Linux: разница между / dev / console, / dev / tty и / dev / tty0

    Почему Shift + Insert paste от CLIPBOARD в некоторых приложениях и PRIMARY в других?

    Как смотреть видео на DVD с внешними субтитрами в Linux?

    Одна командная строка оболочки, которая находит всех студентов в LEC05 и печатает свое имя в отсортированном порядке

    Как отключить экран входа в список пользователей в Gnome 3 на Fedora 16 или 17?

    Как запустить приложение в формате GNOME с помощью командной строки?

    Как использовать GNOME Keyring с Python Keyring в виртуальной среде?

    Можете ли вы заставить систему Linux остановить и загрузите мою малину в определенное время?

    apt-get возвращает странную ошибку

    Поиск соответствия между моим ноутбуком и ядром linux

    Linux и Unix - лучшая ОС в мире.