我正在尝试从安全服务器获取文件列表,以便将它们(使用 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,所以我不能只压缩列表并通过一个命令下载它们
是否可以只输入一次密码?
答案1
不要设置无密码密钥,而是创建受密码保护的密钥并使用 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