Ideal Reality

パソコンのある生活を良くするためのサイト

2019年5月23日 3時48分

sshuttleをパスワードなしで利用できるようにする

sshを簡易VPNとして利用できるsshuttleというソフトがあります。

Windowsで使えないことや、利用には管理者権限が必要なことがデメリットですが、自動でipfwやiptablesを設定してくれるので、接続の際にいちいちSOCKSプロキシの設定などをしなくて済むので非常に便利です。

そこで、sshuttleのコマンドをエイリアスに登録し、パスワードなしで管理者権限を得られるようにしてやることで、即座に接続できるようにしてみましょう。

sudoersファイルの編集

sshuttleにパスワードなしでroot権限を与えるために、sudoersファイルを編集します。

まず、ターミナルを開いて、

echo "$(whoami) ALL=(ALL) NOPASSWD: $(which sshuttle)"

と実行して、その結果をコピーしてください。

「ユーザー名 ALL=(ALL) NOPASSWD: sshuttleのパス」

といった具合の結果になると思います。これをコピーできたら、

sudo visudo

と実行してsudoersファイルを開きます。

このとき、viでsudoersファイルが開かれますが、viが嫌いという場合はこのコマンドを打つ前に

export EDITOR=nano

などとすることで、エディタを変更することができます。(この場合はnano)

そして、sudoersファイルの末尾や”wheel ALL=(ALL) ALL”とか書いてある付近でもどこでもいいので、先ほどの内容をペーストしてください。

で、保存してエディタを終了すればsudoersファイルの編集は完了です。

ちなみに、sudoersファイルを編集するときは必ずvisudoを利用してくださいね。visudoはsudoersファイルの記載ミスをチェックしてくれます。sudoersファイルに編集ミスがあると、rootログインを許可していないパソコンでは誰もroot権限を得られなくなって詰むので。

パスワードなしで接続するコマンド

sshuttleをパスワードなしで実行するためにsudoを使うのですが、この場合sshuttleがrootユーザーで動いてしまうため、秘密鍵やconfigを利用している場合、それらへのパスが変わってしまいます。なので、sshuttleで接続するコマンドは

sudo sshuttle --dns -r ユーザー名@ホスト名 0/0 --ssh-cmd 'ssh -i 秘密鍵へのフルパス -p ポート番号'

という形にしてください。ちなみに”-p ポート番号”はデフォルトの22番の場合は省略可能です。

ちなみに、configファイルを使っている場合、sshコマンドでは”-F configファイルのパス”という形でconfigファイルを指定できるのですが、それでもconfigファイル内で秘密鍵を~/とか使って指定している場合にパスが解決できなくなるので、この場合はconfigファイルを使わないことをお勧めします。

エイリアスの登録

パスワードなしで接続するコマンドはrootユーザーで実行されるために長くなってしまいました。そこで、エイリアスに登録することで短いコマンドで実行できるようにしましょう。

~/.bash_profileもしくは~/.bashrcを開いて

alias 任意のコマンド="先ほどのパスワードなしで接続するコマンド"

とすれば、任意のコマンドを実行するだけで、先ほどのコマンドが実行されてsshuttleをパスワードなしで使えるようになります。

例えば、僕の場合は

alias privatenet="sudo sshuttle --dns -r ユーザー名@ホスト名 0/0 --ssh-cmd 'ssh -i 秘密鍵へのフルパス -p ポート番号'"

とすることで、privatenetと実行すれば自宅内のネットワークに即アクセスできるようになってます。

以上で説明は終わりです。

sshuttleはクライアントがmacかLinuxであり、管理者権限を保持していることが必要で、使える環境が限定されていますが、とても便利なので、ポート転送に困っている人はぜひ使ってみてはいかかでしょうか。

ちなみにmacならbrewで簡単にインストールできますよ

コメント

投稿されたコメントはありません

名前

コメント

関連する投稿