[元の投稿者がサーバーからローカルコンピューターにscpできないという事実を反映するように編集されました。NATか何かの背後にあると思います]
[編集2:参考のために、現在のトンネルベースの回答を保持しています。ただし、元のポスターはローカルマシンにSSHで戻すことができないため、他の何かがトンネルをブロックしていると想定します。最後の提案を参照してください]。
わかりました。サーバーと自宅のコンピューターの間にトンネルを開く必要があります。したがって、次のコマンドを使用して、ローカルコンピューター(Unixベースだと思います。Macであるとおっしゃっていたので、それで問題ありません)からサーバーにsshで接続します。
ssh -R 10022:localhost:22 your_server_address
簡単に言うと、これにより、サーバーのポート10022(High(> 1024)ポートであるため、使用可能になる可能性があります)がローカルコンピューターのポート22(sshが通常リッスンする場所)に転送されます。つまり、これを実行した後、サーバーの10022ポートにSSHで接続すると、実際にはローカルコンピューターにSSHで接続していることになります。サーバーからテストする場合は、次のようにします。
ssh -p 10022 localhost
ローカルコンピュータのユーザー名とパスワードでログインすると、シェルプロンプトが表示されます。このテストを行う場合は、混乱しないように、ログアウトすることを忘れないでください。
トンネルを開いたら、その接続を開いたままにします。これを使用して、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"
(sshへの「-n」スイッチが必要です。後続の$行をsshシェルにフィードしないでください。)