いつでもパブリックサーバーを介してプライベートサーバーにSSH接続できるように、プライベートサーバーとファイアウォールの背後にあるパブリックサーバーの間に永続SSHトンネルを確立する必要があります。
プライベートサーバーで手動でこれを行うと
ssh -R 6666:localhost:22 username@public_host
すべてが正常です。ただし、crontab -e
再起動時にトンネルが自動的にリセットされるようにこの行を入力しても機能しません。何が問題なのかご存知ですか?
メモ:サーバー間の公開/秘密鍵のペアが設定され、正しく機能します。
答え1
autosshを使用すると、これは自動的に行われます。手動で開始または再起動する必要のない継続的な接続用に設計されており、自己監視が可能で、通常のSSHクライアントのようにトンネリング操作を実行できます。
答え2
ssh
セッションコンテキストの外部でコマンドを実行しているため、一般的に利用可能ないくつかのエントリが欠落している可能性があります。
おそらく認証にキーを使用しているでしょう。クローンの仕事からキーを取得できますか?
- キーファイルがパスワードで保護されている場合、パスワードを入力しなかったため、キーは使用できません。パスワードを入力しても、そのキーはセッションキーエージェントのメモリに保存されます。
ssh
セッションで実行されたコマンドは環境変数を介してキーエージェントに接続する方法を知っていますが、SSH_AUTH_SOCK
crontabssh
で実行されたコマンドにはこの変数はありません。 - ホームディレクトリが暗号化されている場合、復号化されたホームディレクトリはまだインストールされていないため、起動時にキーファイルを使用できません。復号化されたホームディレクトリは、復号化されたパスワードを入力するまでマウントできません。
キーが何らかの方法でパスワードで保護されていることが問題の場合、パスワードを入力する前にトンネルを設定することはできません。 2つの解決策があります。
- セッションがトンネル設定を開始するのを待ちます。これは設定のセキュリティを維持しますが、後でトンネルを使用できないことを意味します。セッション開始スクリプトにトンネル設定を追加できます。
- トンネルは、ディスクにプレーンテキストとして保存された秘密鍵を使用して設定されます。