Как выполнить удаленную команду и передать ее в локальный файл?

Можно ли сделать это:

ssh user@socket command /path/to/file/on/local/machine

То есть, я хочу выполнить удаленную команду, используя локальный файл за один шаг, без предварительного использования scp для копирования файла.

  • Как rsync через ssh, когда имена каталогов имеют пробелы
  • daemonize rtorrent
  • Соединения SSH, работающие в фоновом режиме, не выводятся, если несколько соединений были запущены одной и той же оболочкой
  • SSH passwordless root login получает «Permission denied (publickey)».
  • контролировать и смотреть несколько систем непрерывно
  • Не удается войти в SSH с ключом, всегда запрашивая пароль
  • Почему SSH имеет незащищенные дефолты?
  • Запуск существующего сеанса tmux при входе в SSH или создание, если не существует
  • 3 Solutions collect form web for “Как выполнить удаленную команду и передать ее в локальный файл?”

    Вы пропустили только один символ =)

     ssh user@socket command < /path/to/file/on/local/machine 

    Один из способов, который работает независимо от команды, – сделать файл доступным на удаленном компьютере через удаленную файловую систему. Поскольку у вас есть соединение SSH:

    1. Установите обратный туннель SSH . См. Также SSH легко скопировать файл в локальную систему
    2. Установите дерево каталогов на вашем компьютере, содержащее файл для совместного использования на удаленном компьютере с помощью SSHFS . ( Пример )
     # What if remote command can only take a file argument and not read from stdin? (1_CR) ssh user@socket command < /path/to/file/on/local/machine ... cat test.file | ssh user@machine 'bash -c "wc -l <(cat -)"' # 1_CR 

    В качестве альтернативы замене процесса bash < <(xargs -0 -n 1000 cat) <(cat -) или < <(xargs -0 -n 1000 cat) (см. Ниже) вы можете просто использовать xargs и cat для передачи содержимого указанных файлов в wc -l (который более портативный).

     # Assuming that test.file contains file paths each delimited by an ASCII NUL character \0 # and that we are to count all those lines in all those files (provided by test.file). #find . -type f -print0 > test.file # test with repeated line count of ~/.bash_history file for n in {1..1000}; do printf '%s\000' "${HOME}/.bash_history"; done > test.file # xargs & cat ssh localhost 'export LC_ALL=C; xargs -0 -n 1000 cat | wc -l' <test.file # Bash process substitution cat test.file | ssh localhost 'bash -c "export LC_ALL=C; wc -l < <(xargs -0 -n 1000 cat)"' 
    Interesting Posts

    Сколько свободного пространства будет освобождено, удалив субблок btrfs?

    Совместное использование дисков Ubuntu с Windows

    Запуск PHP: невозможно загрузить динамическую библиотеку '/usr/lib64/php/modules/php_mysql.so'

    Прежде чем войти в мою систему, любой способ сделать ключ имитирует другой ключ?

    Можем ли мы добавить репозиторий Manjaro в Arch-Linux?

    Удалить завершающую новую строку из «буфера обмена», чтобы предотвратить выполнение на терминале?

    Не удалось создать hotspot с помощью сетевого менеджера Gnome / Arch Linux

    Как отображать строки 2-4 после каждого результата grep?

    Как я могу определить, какие приложения используют местоположение

    Почему мой процесс слишком долго умирает?

    Возможно ли узнать пользователя, который установил пакет spcify?

    Проблема с выпуском скрипта bash blcheck

    Как загружать Firefox Sync на многих машинах?

    список всех команд Linux, которые не относятся к выбору

    Как узнать типы оконной системы, оконного менеджера и среды рабочего стола Unix-подобной ОС

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