Полное раскрытие: Я - один из авторов и текущего специалиста по обслуживанию eCryptfs утилит пространства пользователя.
Большой вопрос!
Linux имеет максимальную длину имени файла 255 символов для большинства файловых систем (включая EXT4), и максимальный путь 4 096 символов.
eCryptfs является многоуровневой файловой системой. Это складывает сверху другой файловой системы, такой как EXT4, который на самом деле используется для записи данных в диск. eCryptfs всегда шифрует содержание файла, но он может дополнительно зашифровать (затеняют) имена файлов (или не).
Если имена файлов не шифруются, то можно безопасно записать имена файлов до 255 символов и зашифровать их содержание, поскольку имена файлов, записанные в более низкую файловую систему, будут просто соответствовать. В то время как взломщик не смог бы считать содержание index.html
или budget.xls
, они знали бы, какие имена файлов существуют. Это может (или не может) пропускать уязвимую информацию в зависимости от Вашего варианта использования.
Если имена файлов шифруются, вещи становятся немного более сложными. eCryptfs предварительно ожидает немного данных по передней стороне зашифрованного имени файла, такого, что это может определить зашифрованные имена файлов окончательно. Кроме того, само шифрование включает "дополнение" имени файла.
Например, у меня есть зашифрованный файл, ~/.bashrc
. Это имя файла шифруется с помощью моего ключа к:
/home/kirkland/.Private/ECRYPTFS_FNEK_ENCRYPTED.dWek2i3.WxXtwxzQdkM23hiYK757lNI7Ydf0xqZ1LpDovrdnruDb1-5l67.EU--
Очевидно, то, что 7 символьных имен файла теперь требуют, чтобы были зашифрованы больше чем 7 символов. Опытным путем мы нашли, что символьные имена файлов дольше, чем 143 символа начинают требовать> 255 символов шифровать. Таким образом, мы (как eCryptfs восходящие разработчики) обычно рекомендуем ограничить имена файлов ~140 символами.
Теперь, однако, NAS Synology является коммерческим продуктом, который встраивает и использует eCryptfs и Linux, чтобы зашифровать и защитить данные по устройству. Мы (восходящие разработчики eCryptfs) не имеем никакого отношения к Synology или их продуктам, хотя мы обычно рады видеть eCryptfs, используемый в дикой природе. Мне кажется, что их рекомендация 45 символов является любой типографской ошибкой (из наших 140 символьных рекомендаций), или просто намного более осторожная оценка.
От здесь-строки (<<<
) синтаксис, который Вы использовали, я предполагаю, что Ваша оболочка bash
, таким образом, можно также использовать строку с оставленными из обратной косой черты символами ($''
):
sftp -o PasswordAuthentication=no user@host <<< $'lcd /home\n cd /myhome\n get file'
Портативная альтернатива является здесь-документом:
sftp -o PasswordAuthentication=no user@host <<END
lcd /home
cd /myhome
get file
END
Используйте -b/--batchfile
опция иметь надлежащую обработку ошибок:
printf '%s\n' 'lcd /home' 'cd /myhome' 'get file' | sftp -b - user@host
Да, можно просто использовать echo -e
echo -e "lcd /home\ncd /myhome\nget file" | sftp user@host
echo
очень нестандартно - echo -e
не работает то же везде, таким образом, необходимо было бы проверить сначала. С другой стороны, просто используйте printf
который является намного более портативным и должен работать то же везде.
– jw013
08.11.2012, 18:59
Используйте собственную команду sftp
sftp-o PasswordAuthentication=no user@host:/home/myhome/file
Необязательно избегать параметра -b
, чтобы избежать записи командного файла на диск. Используя замещение процесса , вы можете создать пакет "на лету".
batch() {
echo lcd /home
echo cd /myhome
echo get file
}
sftp -b <(batch) -o PasswordAuthentication=no user@host
Mybru, ты можешь передавать свои команды вот так:
echo '
lcd /home
cd /myhome
get file
' | sftp -o PasswordAuthentication=no user@host
<<<
был представлен сначала zsh (хотя вдохновленоrc
) и был позже добавлен к ksh93, и затем колотите. – Stéphane Chazelas 09.11.2012, 00:34zsh
навыки. А-ч – manatwork 09.11.2012, 10:49