したがって、システムを起動するたびに、作成したSSHスクリプトを実行することになっているUbuntu 16.04システムがあります。これを機能させようとするのはこれが初めてなので、これまでにありませんでした。
スクリプトは非常に簡単です。
while true; do sleep 60; ssh root@ip -i ~/.ssh/key -R xxxx:localhost:22; done
autossh.sh
というファイル内にあります。
スクリプトを自動的に実行するために、/ etc/rc.local内に(exit 0の前に)含めようとし、UbuntuのGUIからスタートアップアプリケーションのリストに追加しようとしました。
両方の時間でコンピューターを再起動すると、スクリプトが実際に実行されていることがわかりますが、コマンドが実行するはずのようにリモートポートをlocalhost 22にマッピングしていません。コマンドを手動で実行すると機能しますが、起動時に機能しません。
このスクリプトが正常に機能しないのを妨げている明らかなものがありますか?
1。チルダ(~
)はホームディレクトリに解決されますが、ログインしていない間は意味がありません。次の提案によると、これはそれほど重要ではありませんが、強調するのは良いことです。 関連する回答 。ここでの私の提案は、この方法でスクリプトを書き換えることです。
#!/bin/bash
while true; do sleep 60; ssh root@ip -i "$HOME/.ssh/key" -N -f -R xxxx:localhost:22; done
または、/the/full/path/to/
の代わりに$HOME
を使用することをお勧めします。
-f
コマンド実行の直前にバックグラウンドに移動するようsshに要求します。
-N
リモートコマンドを実行しないでください。これは、ポートを転送するだけの場合に便利です。
2。SSHキーは所有者のみが読み取り可能であるため、他のユーザーはそれらを使用できず、システム全体で使用することはできません。したがって、私の提案は、このタスクにCronを使用することです。
SSHキーの所有者であるユーザーでログインし、crontab -e
(-e
が編集を意味する)を実行するか、Sudo -u <user-name> crontab -e
(-u
がユーザーが<user-name>
)下に次の行を追加します。
@reboot /full/path/to/the/script/autossh.sh > /tmp/autossh.log 2>&1
Crontabを保存して閉じます。この行は、システムの起動時にスクリプトを実行し、 a log と書き込みます。
参照:
更新: