использовать SFTP в сценарии оболочки

Я написал сценарий оболочки для получения файлов с другого сервера UNIX. Но файлы не копируются. Может ли кто-нибудь помочь мне в том, что я делаю неправильно.

sftp username@server:$path get ubpbilp* ./ mget cust.cmp* bunc.cmp* ./ echo "Your files are copied." 

  • Ограничить доступ ssh для каждого пользователя на основе условий
  • Как ограничить соединения с сервером OpenSSH с помощью секретных ключей обязательно с помощью фраз?
  • можно ли запускать `ssh-add <key>` только тогда, когда я ssh в поле? (от Cygwin)
  • Sudo не запрашивает пароли, если NOPASSWD не работает
  • SSH ключ только для удаленного входа в систему, отключает пароль хорошей практики?
  • Имитировать предупреждение идентификации удаленного хоста
  • Запуск разницы между локальными и удаленными файлами
  • Избегайте «Совместное подключение к <host> закрытым» сообщениям
  • 2 Solutions collect form web for “использовать SFTP в сценарии оболочки”

    Возможно, вот так:

     sftp username@server <<EOT cd $path get ubpbilp* get cust.cmp* get bunc.cmp* quit EOT 

    поскольку sftp не поддерживает mget .

    Как отмечали другие, вам необходимо передать команды get качестве входных данных sftp . Вы можете сделать это с помощью этого документа . Также обратите внимание, что sftp не имеет команды mget .

     sftp "username@server:$path" <<'EOF' get ubpbilp* ./ get cust.cmp* ./ get bunc.cmp* ./ EOF 

    SFTP не очень удобно писать. Если сервер разрешает scp, используйте его. Если вы просто хотите скопировать некоторые файлы, это проще. Вы можете передавать шаблоны в командной строке scp ; обязательно процитируйте их, чтобы они были расширены с удаленной стороны, а не с локальной оболочки. Не забывайте о финале . указывая, что местом назначения является текущий каталог.

     scp -p \ "username@server:$path/ubpbilp*" \ "username@server:$path/cust.cmp*" \ "username@server:$path/bunc.cmp*" \ . 

    Если вам нужно сделать больше, чем копировать файлы, установите SSHFS , если это возможно. SSHFS обеспечивает доступ к удаленным файлам через обычный механизм файловой системы. Он использует SFTP под капотом, поэтому, если сервер разрешает SFTP, вы можете использовать SSHFS, при условии, что ваш компьютер позволяет клиенту разрешать FUSE .

     mkdir server-dir trap 'fusermount -u server-dir; rmdir server-dir' 0 HUP INT TERM sshfs "username@server:$path" server-dir cp -p server-dir/ubpbilp* cust.cmp* bunc.cmp* . 
    Linux и Unix - лучшая ОС в мире.