[编辑以反映原始发布者无法从服务器 scp 到他的本地计算机的事实;我认为它在 NAT 或类似的东西之后]
[编辑 2:我保留当前基于隧道的答案,以供参考;但是,由于原始发布者无法 ssh 回到他的本地机器,我会假设其他东西阻塞了隧道。见最后的建议]。
好的,您需要在服务器和家用计算机之间打开一条隧道。因此,使用以下命令从您的本地计算机(我假设它是基于 Unix 的,您提到的是 Mac,所以没关系)通过 ssh 进入服务器:
ssh -R 10022:localhost:22 your_server_address
简而言之,这会将服务器的端口 10022(它是一个高 (> 1024) 端口,因此它很可能可用)到您本地计算机的端口 22(这是 ssh 通常监听的地方)。也就是说,一旦你这样做了,如果你 ssh 到服务器的 10022 端口,你实际上是在 ssh 到你的本地计算机。如果你想测试它,从服务器,做:
ssh -p 10022 localhost
使用本地计算机的用户名和密码登录,您应该会看到它的 shell 提示符。如果您进行此测试,请记住退出,以免混淆。
打开隧道后,请保持该连接打开。您可以使用它来运行下载 PDF 等的 bash 命令行,但这不是必需的。
然后,尝试以下命令行:
while read line; do python python_script.py -l "$line"; scp -P 10022 *.pdf localhost:path/to/put/files/; rm *.pdf; done < pdfURLs.txt
需要注意的几点:
- 这会等到 scp 完成,然后 python 脚本才会下载下一个 PDF。您提到您实际上想要这样做,而不是将 PDF 文件长期保存在服务器上。
- 这会将所有 PDF 文件从当前目录复制到您的本地计算机(然后删除它们),因此最好从以前的空目录运行它。
- 我假设您无需输入密码即可 scp(例如,使用共享密钥身份验证),否则可能会有点烦人,不得不一直重新输入密码。
应该可以的。
[编辑添加此替代方案,用于隧道不工作时]
如果失败,我只能假设有其他东西阻止了您的 ssh/scp 从服务器到本地计算机。在这种情况下,您可以尝试不同的方法:从您的 本地 机器上,做
while read line; do ssh -n server_address "cd tmp_download_directory && rm -f *.pdf && python python_script.py -l $line" && scp server_address:tmp_download_directory/*.pdf /local/path/to/put/files/; done < pdfURLs.txt; ssh server_address "rm -f tmp_download_directory/*.pdf"
(“-n”切换到 ssh 是必要的,不要将后续的 $lines 输入 ssh shell。)