Cron ジョブは実行中ですが、トンネルは確立されませんでした。

Cron ジョブは実行中ですが、トンネルは確立されませんでした。

エンドポイントにリバーストンネルを設定するスクリプトがありますHostB。次のようになります。

cat tun.sh

#!/usr/bin/env bash

# Test code
/usr/bin/ssh -V 1> /home/userA/bin/tun.stdout 2> /home/userA/bin/tun.stderr

# Establish tunnel
createTunnel() {
    /usr/bin/ssh -R *:19999:localhost:22 userB@hostB
}

# Do nothing if tunnel is already established
/usr/bin/ssh -p 19999 userA@hostB true
if [[ $? -ne 0 ]]; then
    createTunnel
fi

手動で実行すると./tun.sh正常に動作し、HostBでuserAがログインしていることがわかります。 HostAで再実行しますが、別のコンソールで実行すると期待どおりに機能します。つまり、2 番目のトンネルは開始されません。

今まではそんなに良くなった。

次に、crontabを次のように編集します。

crontab -l

# m h  dom mon dow   command
*/1 *   *   *   *   /home/userA/bin/tun.sh

毎分スクリプトを実行します。トンネルがすでに設定されている場合、スクリプトは終了するので大丈夫です。

ただし、userAはコンソールで手動で実行したときと同じようにログインしません。

スクリプトの上部にあるテストコードは、スクリプトが呼び出され、実行権限があることを確認します/usr/bin/ssh

~/bin$ ls

tun.sh  tun.stderr  tun.stdout

~/bin$ cat tun.stderr

OpenSSH_5.3p1 Debian-3ubuntu7, OpenSSL 0.9.8k 25 Mar 2009

~/bin$ cat tun.stdout

[empty]

何らかの理由で認知文を書く代わりに-V文を書くのだが、それがディテールだ。ここで重要なのは、スクリプトが1分ごとに実行されることです。stderrstdout

私の質問は次のとおりですSSHトンネルが確立されていないのはなぜですか?

ベストアンサー1

指摘してくれた@Andrewに感謝しますssh-agent。私が知っている限り、毎回パスワードを入力せずにトンネルを設定するには、パスワードを保存または削除する必要があります。私は削除を選択しました。記録のために私が受け取ったコメントに基づいてまとめた内容は次のとおりです。

#!/usr/bin/env bash

# Establish tunnel
createTunnel() {
    /usr/bin/ssh -i /home/laptopuser/.ssh/id_rsa_tunnel -R 2200:localhost:22 [email protected]
}

# Do nothing if tunnel is already established
/usr/bin/ssh -i /home/user/laptopuser/.ssh/id_rsa_tunnel -p 2200 [email protected] true
if [[ $? -ne 0 ]]; then
    createTunnel
fi

予約されたもの:

# m h  dom mon dow   command
*/1 *   *   *   *   /home/laptopuser/bin/establishTunnel.sh

トンネルIDをvpsにコピーします。

ssh-copy-id -i /home/user/laptopuser/.ssh/id_rsa_tunnel vps.com

トンネルが実行されるのを待ち(参照sudo watch grep CRON /var/log/syslog)、まだトンネルにない場合は、一般IDをコピーしてください。~/.ssh/authorized_keys

ssh-copy-id vps.com -p 2200

理想的には、トンネルはvpsとラップトップで専用ユーザーとして実行されます。

おすすめ記事