はじめに
ESXiでvmのバックアップをしていて,それをcronでスケジューリングしていましたが,なぜかうまく動かなくなってしまいました(´;ω;`)
そのため,vmの方のcronでESXiのシェルスクリプトを動かしましたので,そのやり方について解説します.
環境
- ESXi8.0
- VM
- ubuntu22.04 LTS
- Python 3.10.6
鍵交換
まず,vmからESXiにアクセスしてシェルスクリプトを動かしたいので鍵交換をします.
鍵はvmで
ssh-keygen -t rsa
このコマンドで作成します.
ed25519ではなくrsaで作ったのはed25519だとうまくsshできなかったからです.
この辺よくわからなかったので,知っている方がいれば教えていただけると幸いです.
そうしたら作成した鍵の.pubの公開鍵をscpコマンドでESXiに転送します.
scp 公開鍵パス ユーザ名@サーバ名:保存先パス
~/と保存先パスに書けばホームディレクトリを指定できます.
ここでちゃんとできていればESXiのパスワードが聞かれます.
パスワードを入力したら送れるはずなので,一度ESXiでlsなどして確認してみてください.
鍵交換はauthorized_keysに鍵をコピーしないといけないのでESXiで
cat 公開鍵パス >> /etc/ssh/keys-root/authorized_keys
をしてください.
/.ssh/ ではなく /etc/ssh/keys-root/ のauthorized_keysに追記するようにしてください.
でないとvmからssh出来ないです.
確認のためにcatなりでauthorized_keysの中を確認して公開鍵が追記されていれば完了です.
ESXiのシェルスクリプトを動かす
ここでvmにESXiのシェルスクリプトを動かすシェルスクリプトを作ります.
ssh -i 秘密鍵パス ユーザ名@サーバ名 . シェルスクリプトパス
なんとこの1行だけで出来てしまいます.
試しに適当なシェルスクリプトを実行してみて,パスワード入力なしに出来ていればOKです.
cron
vmのcronの設定をします.
* * * * * echo "The script ran at $(date)" >> ログのパス
* * * * * vmのシェルスクリプトのパス >> ログのパス
1行目はその日付,2行目はシェルスクリプトの実行結果をログに保存しています.
左側の*マークに日時を指定するのですが,ここの時間はUTCになっているので気を付けてください.
これで実行できていればログに結果が出力されるはずなので,それが確認できていればOKです.
syslogでもcronの動作を確認できるので,そっちも確認してみるといいかもしれません.
これでvmからESXiのシェルスクリプトを動かすことができました!
おわりに
今回はvmのcronでESXiのシェルスクリプトを動かしましたのでその解説をしました.
ESXiのcronが動かない謎が解けてないですが,とりあえずはこれでバックアップができるので一安心です.