systemdでsshuttleを管理する
業務用マシンのsshuttle管理をsystemdにするで作業したときのメモ。
systemdでsshuttleを管理するときの注意点もある。
sshuttle の —sudoers-no-modify オプションで sudoers に追加するオプションを出力できる。デフォルトではカレントユーザーのユーザー名が使われるけど、これは —sudoers-user で変更できる。グループにしたい場合は %group と書く。
$ sshuttle --sudoers-no-modify --sudoers-user=lufiaCmnd_Alias SSHUTTLExxx = /usr/bin/env PYTHONPATH=/usr/lib/python3.12/site-packages /usr/bin/python /usr/bin/sshuttle *
lufia ALL=NOPASSWD: SSHUTTLExxxxxx のところはランダム文字列で埋められる。これを /etc/sudoers に追記すればいいのだけど、混ぜたくないので /etc/sudoers.d/sshuttle に書くといい。
run0 visudo -f /etc/sudoers.d/sshuttleところで、 PYTHONPATH が入っているとアップデートしたとき不便なので、入れたくない場合は —no-sudo-pythonpath オプションを渡すと削ってくれるらしい。
その場合は sudoers ファイルも変更したほうがいいかもしれない?このオプションを渡しても出力結果は何も変わらない気がするが…
$ sshuttle --sudoers-no-modifyCmnd_Alias SSHUTTLExxx = /usr/bin/sshuttle *
lufia ALL=NOPASSWD: SSHUTTLExxxgpg-agentが鍵を管理する場合
Section titled “gpg-agentが鍵を管理する場合”gpg-agentをssh-agentとして使う環境では、この方法で sshuttle を起動すると sudo を求められてうまく動作しない。というよりも以前は sshuttle によって
/usr/bin/env PYTHONPATH=/usr/lib/python3.12/site-packages /usr/bin/python /usr/bin/sshuttle *というコマンドを実行していたが、今は /usr/bin/python 部分がなくなっていて
Cmnd_Alias SSHUTTLExxx = /usr/bin/env PYTHONPATH=/usr/lib/python3.12/site-packages /usr/bin/sshuttle *が正しい。sshuttle —sudoers-no-modify で出力した結果にはまだ python 部分が残っているので、手で消して対応すると改善する。
それでもまだ鍵のパスフレーズを求められるときに困るが、それはsystemdのユニットでsshuttleをするとパスフレーズを読み取れなくて起動しないと同じ問題。