はじめに
複数のVPNを切り替える際に、認証情報(Username, Password)を入力することが面倒で、パスワードを間違えると、再度入力しないといけなくなり、わずかでありながらも、仕事する中の小さなストレスだと感じています。
今回は、コマンドでスムーズに複数のVPNを切り替える方法を紹介します。
コマンドを紹介する前に、なぜ複数VPNを使っているかを話します。
切り替えているVPN
筆者は普段から、開発したソースコードをGithubにプッシュしたり、DBにアクセスしたりします。
Githubへのアクセスは社内VPN、DBには別のVPNに接続する必要があります。
社内VPNからDB接続できるようにすればいいじゃないかと思いますが、社内VPNから顧客システムDBに接続できると、関係者以外の社員もアクセスできてしまいますので、まずい話です。
社内VPNはCisco AnyConnectで接続し、DB接続用VPNはMac OS標準のVPN機能を使用しています。
社内VPN (Cisco AnyConnect)
Cisco社のAnyConnectを使用しています。
接続するために、AnyConnectを開き、接続先を選択します。
System keychainのアクセス許可が求められ、Username と Password を入力する必要があります。(面倒)
さらに、Cisco Anyconnect からも Username と Password を求められ、再度入力します。
ここまでできて、やっと社内VPNに繋がります。
1日のはじめに、Mac起動後に1回だけこの作業をやるのであれば、まだ我慢ができます。
ただ、1日に何回もDB接続する場面があったりするので、Cisco AnyConnect も何回も接続/切断する羽目になります。
DB接続用VPN
DB接続用VPNはCisco AnyConnectを使わず、Mac OS標準のVPN機能を使用します。
(System Preferences > Network から設定するVPN)
↑のように、ネットワーク設定画面から接続/切断できますが、
↓のように、ツールバーにVPNアイコン配置して、VPNの接続/切断もできます。
VPNをスムーズに切り替えるコマンド
上で説明したVPN切り替え操作は、コマンドラインからでも実現できます。
下記のコマンドで Cisco VPN に切り替えます。
# Disconnet VPN |
また、下記のコマンドで、標準機能VPNに接続できます。
# Disconnect Cisco AnyConnect |
ではここから、それぞれのVPNに切り替えるコマンドを解説します。
Cisco VPN に切り替えるコマンド
標準機能VPNを切断して、Cisco VPNに接続します。
# Disconnet VPN |
scutil
コマンドを使用して、環境変数 VPN
で指定した標準機能VPNを切断します。
scutil --nc stop ${VPN}; |
次にvpn
コマンドを使用して、環境変数CISCO_VPN
で指定したCisco VPNに接続します。
Username、Passwordと確認の入力を求められますので、入力します。
$ /opt/cisco/anyconnect/bin/vpn -s connect ${CISCO_VPN}; |
毎度入力するのが面倒なので、Username、Passwordと確認の入力(Yesの)yが書き込まれているテキストファイルを用意します。
Username |
リダイレクトを使って標準入力の入力元として、このテキストファイルを指定してあげると、Username、Passwordと確認の入力を手入力しなくて済みます。
/opt/cisco/anyconnect/bin/vpn -s < ~/.vpn/CISCO_VPN.cre connect ${CISCO_VPN}; |
アプリケーションAnyConnect
を起動している状態で、vpn
コマンドを実行すると、怒られます。
$ /opt/cisco/anyconnect/bin/vpn -s < ~/.vpn/CISCO_VPN.cre connect ${CISCO_VPN}; |
アプリケーションAnyconnet
を閉じて、再度実行すると、無事に接続できます。
$ /opt/cisco/anyconnect/bin/vpn -s < ~/.vpn/CISCO_VPN.cre connect ${CISCO_VPN}; |
標準機能VPNに切り替えるコマンド
今度はCisco VPN
を切断して、標準機能VPN
に接続するので、上記のコマンドと逆のことをやっています。
# Disconnect Cisco AnyConnect |
vpn
コマンドで、Cisco VPN
を切断します。
$ /opt/cisco/anyconnect/bin/vpn -s disconnect; |
scutil
コマンドを使用して、環境変数VPN
で指定した標準機能VPN
に接続する際に、事前共有鍵が必要となります。
そのため、鍵情報をテキストファイルに保存して、環境変数secret
として読み込んだ上で、実行します。
secret=`cat ~/.vpn/vpn`; |
VPN切り替えコマンド導入の効果
コマンドを導入したことで、どの程度スムーズに切り替えることができるのか、時刻コマンドで実際の処理時間を測ってみます。
Mac OSだと、標準の時刻コマンド date は秒までしか指定できないので、代わりにナノ秒を指定できる gdate コマンドを使用して、計測します。
+ start=`gdate +%s.%N` |
計測した結果、Cisco AnyConnect に接続する ciscovpn.sh は 約2.3秒
execution time: 2.335424000 |
VPNに接続する vpn.sh は約 0.8秒となりました。
execution time: .785082000 |
通常の手動ですと、VPNの切り替えに10秒程度はかかることと比べて、2秒程度で切り替えられることを考えると、VPNをスムーズに切り替えられていると言えます。
また、手動によるパスワードの入力間違いなどもなくなり、小さいながらもストレス軽減に繋がっています。
まとめ
今回はMacでのVPN切り替えコマンドを紹介しましたが、Windowsでも同様にVPNを切り替えることができます。
マウス操作よりもキーボード操作やコマンド操作に移行することで、1つ効率化を図ることができました。
毎日やっている単純作業を自動化することで、より考えることに集中して、知的生産性を高めることができると考えています。