sshuttleをパスワードなしで利用できるようにする
sshを簡易VPNとして利用できるsshuttleというソフトがあります。
Windowsで使えないことや、利用には管理者権限が必要なことがデメリットですが、自動でipfwやiptablesを設定してくれるので、接続の際にいちいちSOCKSプロキシの設定などをしなくて済むので非常に便利です。
そこで、sshuttleのコマンドをエイリアスに登録し、パスワードなしで管理者権限を得られるようにしてやることで、即座に接続できるようにしてみましょう。
sudoersファイルの自動生成
sshuttle 1.0.0以降にsudoersファイル自動生成機能がつきました。sshuttle --sudoers
と実行するだけでsudoersファイルを自動設定してパスワードなしで使えるようにしてくれます。
/etc/sudoers.d/sshuttle_auto
に以下のような内容のファイルが生成される形。
Cmnd_Alias SSHUTTLE5AC = /usr/bin/env PYTHONPATH=/usr/local/Cellar/sshuttle/1.0.4_1/libexec/lib/python3.9/site-packages /usr/local/Cellar/sshuttle/1.0.4_1/libexec/bin/python /usr/local/bin/sshuttle *
ユーザー名 ALL=NOPASSWD: SSHUTTLE5AC
バージョン 1.0.0以降を使う場合はこれでいいです。Python2系しか入ってないサーバーに接続する場合、古いバージョンのsshuttleが必要となるので、その場合は以下のように手動で設定してください。
手動で設定する方法
sshuttleがsudoで実行しているコマンドを調べる
とりあえず、sshuttleで適当なサーバーに接続させた状態でps auxwww | grep sud
を実行してみてください。この記事では0.78.5_2で試してます。
root 33102 0.0 0.0 4436888 4568 s003 S+ 3:08AM 0:00.01 sudo -p [local sudo] Password: /usr/bin/env PYTHONPATH=/usr/local/Cellar/sshuttle/0.78.5_2/libexec/lib/python3.8/site-packages /usr/local/Cellar/sshuttle/0.78.5_2/libexec/bin/python3.8 /usr/local/bin/sshuttle --method auto --firewall
このような出力があるはず。
sshuttle --sudoers
で自動生成される内容と見比べてみればわかると思いますが、/usr/bin/env PYTHONPATH=/usr/local/Cellar/sshuttle/0.78.5_2/libexec/lib/python3.8/site-packages /usr/local/Cellar/sshuttle/0.78.5_2/libexec/bin/python3.8 /usr/local/bin/sshuttle
が今回欲しい内容です。
visudoでsudoersファイルを編集
sudo visudo
でsudoersファイルを編集できるので、末尾に
## Execute sshuttle without password
Cmnd_Alias SSHUTTLE = /usr/bin/env PYTHONPATH=/usr/local/Cellar/sshuttle/0.78.5_2/libexec/lib/python3.8/site-packages /usr/local/Cellar/sshuttle/0.78.5_2/libexec/bin/python3.8 /usr/local/bin/sshuttle *
ユーザー名 ALL=NOPASSWD: SSHUTTLE
とでも追加してください。もちろんユーザー名は自分のものに変えてくださいね。
コメント