公開サーバーへの SSH トンネルを開くスクリプトを作成しようとしています。すべて記述して正しく動作していますが、サーバーへの接続が確立されていないようです。ログには次のような内容が記録されています。
Jun 8 21:00:01 <hostname> CRON[xxxx]: session opened for user <user> by (uid=0)
Jun 8 21:00:01 <hostname> CRON[xxxx]: session closed for user <user>
0~1 秒間隔で何度も繰り返します。この接続をオープンにしたいのですが... これをオープンに維持するにはどうすればよいでしょうか?
私の cron のコードは次のようになります (はい、1 分ごとに実行されていることはわかっています)。
* * * * * /bin/bash /home/<user>/ssh
チェックイン用のコードは次のとおりです:
sshpass -p <password> ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22
では、もう一度、この接続を開いたままにするにはどうすればよいでしょうか。別のスクリプトで適切なタイミングで接続を強制終了するメカニズムがありますが、上記のコマンドをコマンドラインから手動で実行しない限り、cron によって直ちに接続が強制終了されます。
答え1
crontab スクリプトにいくつかの間違いがあります。
切断の原因となっているのは、スクリプトが実行権限だけでなく、suidビットも設定されている必要があることです(sudo chmod 4755 /pah/to/script)もしシェル スクリプトを root として実行しています。
crontab環境はユーザーの環境と大きく異なります。そのため、常に使用する必要があります。フルパスコマンド:
/usr/bin/sshpass -p <password> /usr/bin/ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null <user>@<url> -p <port> -R222<random_number>:localhost:22
フラグを追加する必要があります-t -tにsshコマンドを 2 回実行します。これにより、tty を割り当てることができないというエラーが抑制されます。
これまでの間違いについては確信しているが、かもしれないトラブルを引き起こすかどうかはわかりませんし、試してみる時間もありません。-pコマンドにフラグが含まれておらず、シェルによって正しく解釈されるかどうかわかりません。私なら、ssh試しに、コマンドとそのオプションを一重引用符または二重引用符で囲んで入力します。
前述の反対意見とオープンパスワードの使用は、暗号鍵を使用すれば回避できるかもしれない。その場合、.ssh/config次の行をファイルします。
Host ShortName
HostName The.Full.HostName.com
User yourname
Port your-non-standard-port
IdentityFile /path/to/crypto/keyù
IdentitiesOnly yes
そしてそのワンライナーは
/usr/bin/ssh -t -t -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -R222<random_number>:localhost:22 ServerName