Я только что обнаружил, что IdentitiesOnly
для правильной работы необходим открытый ключ на локальном компьютере.
Без открытого ключа на локальном компьютере у меня всегда запрашивалась фраза-пароль, даже если закрытый ключ был в агенте и, конечно же, открытый ключ на удаленном компьютере.
Путь к открытому ключу совпадает с путем к закрытому ключу с добавлением .pub
.
Я не знаю способа сопоставить имена удаленных файлов/каталогов с таким критерием, как полностью числовое значение. Однако, поскольку вы используете scp
, кажется разумным предположить, что ssh
также доступен. Исходя из этого, вот как я рассматривал бы решение проблемы:
rhost="user@remoteHost" # Fix as appropriate
rpath="/dir" # Likewise
ssh -qn "$rhost" "find '$rpath' -maxdepth 1 -type d -print0" |
while IFS= read -r -d '' item
do
if [[ "$item" =~ ^(.*/)?[0-9]+$ ]]
then
# Numeric directory
echo "Copying $item" >&2 # Optional
scp -r "$rhost":"$rpath/$item". # Maybe -a instead of -r
fi
done
Предостережения
find
на удаленной системе (для-print0
)bash
в локальной системе (для read
и сравнения RE)$rpath
не должно содержать ни двойных, ни одинарных кавычек Если у вас нет GNU find
в удаленной системе, вы можете заменить -print0
на -print
, а затем изменить read -r -d '' item
, чтобы он стал просто read -r item
. Однако затем он может неожиданно работать со «странными» именами каталогов, такими как $'123\ntext\n456'
, которые следует исключить.