Захват 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 .

  • Командная строка 'buffer'
  • Запись на stdout, кроме перенаправления вывода C
  • Являются ли unix программы способными определять, где их выход идет?
  • Как создать реальную копию дескриптора файла stdout и stderr без использования unbuffer / script / tee только с встроенными встроенными в bash?
  • Неудачное решение от «Как перенаправить stdout и stderr в файл и отобразить stderr для консоли»
  • Как отправить stderr в stdout с помощью трубы в другую команду?
  • Любой способ бросить несколько строк справочной страницы, чтобы показать на stdout для справки?
  • Безопасно ли вводить другую команду в STDIN, пока предыдущая команда записывает в STDOUT?
  • Я хочу поймать STDERR и STDOUT сценария с фоновым запуском
  • Команда для вывода содержимого файла в stdout?
  • Ksh теряет данные после трубопровода 16K байт
  • Interesting Posts

    Ошибка ввода-вывода при перезаписи всего диска

    Список файлов в каталоге с определенным расширением

    Поддерживает ли сортировка сортировку файла на месте, например `sed –in-place`?

    после добавления еще одного физического объема и увеличения логического тома grub не удается

    Как получить выход внутри `screen` вне скрипта?

    ahci: nvme remap поддерживает исправления и debian-stable

    NFS: очень медленное размонтирование при перезагрузке / выключении

    Как проверить диски при запуске (альтернатива chkdsk c: / f для Windows)

    Является ли адрес «computer: ///» только что-то символическим или его можно использовать где-то?

    Хранить LXPanel сверху в Openbox

    Безопасная доля в самбе не работает, почему?

    Xen и Networking

    Как Gnome (Cinnamon) находит значок исполняемого двоичного файла?

    Можно ли использовать split для создания кусков символов из китайских байтов юникода?

    Утерянные учетные данные для виртуальной машины Linux

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