Skip to content

systemdでsshuttleを管理する

業務用マシンのsshuttle管理をsystemdにするで作業したときのメモ。

systemdでsshuttleを管理するときの注意点もある。

sshuttle—sudoers-no-modify オプションで sudoers に追加するオプションを出力できる。デフォルトではカレントユーザーのユーザー名が使われるけど、これは —sudoers-user で変更できる。グループにしたい場合は %group と書く。

Terminal window
$ sshuttle --sudoers-no-modify --sudoers-user=lufia
Cmnd_Alias SSHUTTLExxx = /usr/bin/env PYTHONPATH=/usr/lib/python3.12/site-packages /usr/bin/python /usr/bin/sshuttle *
lufia ALL=NOPASSWD: SSHUTTLExxx

xxx のところはランダム文字列で埋められる。これを /etc/sudoers に追記すればいいのだけど、混ぜたくないので /etc/sudoers.d/sshuttle に書くといい。

Terminal window
run0 visudo -f /etc/sudoers.d/sshuttle

ところで、 PYTHONPATH が入っているとアップデートしたとき不便なので、入れたくない場合は —no-sudo-pythonpath オプションを渡すと削ってくれるらしい。

その場合は sudoers ファイルも変更したほうがいいかもしれない?このオプションを渡しても出力結果は何も変わらない気がするが…

Terminal window
$ sshuttle --sudoers-no-modify
Cmnd_Alias SSHUTTLExxx = /usr/bin/sshuttle *
lufia ALL=NOPASSWD: SSHUTTLExxx

gpg-agentをssh-agentとして使う環境では、この方法で sshuttle を起動すると sudo を求められてうまく動作しない。というよりも以前は sshuttle によって

Terminal window
/usr/bin/env PYTHONPATH=/usr/lib/python3.12/site-packages /usr/bin/python /usr/bin/sshuttle *

というコマンドを実行していたが、今は /usr/bin/python 部分がなくなっていて

Terminal window
Cmnd_Alias SSHUTTLExxx = /usr/bin/env PYTHONPATH=/usr/lib/python3.12/site-packages /usr/bin/sshuttle *

が正しい。sshuttle —sudoers-no-modify で出力した結果にはまだ python 部分が残っているので、手で消して対応すると改善する。

それでもまだ鍵のパスフレーズを求められるときに困るが、それはsystemdのユニットでsshuttleをするとパスフレーズを読み取れなくて起動しないと同じ問題。