Я пытаюсь получить список файлов с защищенного сервера, чтобы сравнить их (используя diff) с теми, которые я модифицировал в локальной версии (к сожалению, компания, в которой я работаю, еще не использует Subversion или git)
я легко получаю список файлов с помощью:
find . -mtime -20 | grep "\.php\|\.js\|\.css" > changedfiles.log
мне нужен скрипт, который будет перебирать этот список и безопасно копировать каждый из них (scp или rsync) в локальный каталог, сохраняя относительное имя пути. Я попытался:
for line in `cat changedfiles.log`
do
DIRPATH=`dirname "$line"`
`mkdir -p myfiles/$DIRPATH`
scp user@host:/remotepath/$line myfiles/$line
done
но scp продолжает спрашивать у меня пароль (я не хочу настраивать аутентификацию на основе ключей для scp без пароля)
Мне не разрешено использовать ssh на удаленном сервере, поэтому я не могу просто заархивировать список и загрузить их одной командой
можно ли что-то сделать, чтобы ввести пароль только один раз?
Вместо того, чтобы настраивать ключ без ключевой фразы, создайте ключ, защищенный парольной фразой, и используйте ssh-agent, чтобы гарантировать, что вам нужно вводить его только один раз для каждого задания.
После создания ключей добавьте к скрипту что-то вроде префикса:
# Start a new agent
eval `ssh-agent -s`
# add keys with a two-hour time limit
ssh-add -t 7200 ~/.ssh/id_rsa
На этом этапе вам будет предложено ввести кодовую фразу. После завершения вашего скрипта вы можете автоматически убить ssh-agent, если вы не хотите, чтобы он продолжал работать:
# kill the agent
ssh-agent -k