本日のお昼休みにその場のノリで始まったマグロ大学、もとい近畿大学のエンジニア見習いが今日から毎日書いていくであろうアドベントカレンダー1日目(12日目)の記事です。
一発目という事で技術よりですが軽めの記事です。
何のソリューション?
LAN内の自宅サーバーにsshしたいときどのように接続しますか?
ssh $user@$domain
とかやりたいですが、ローカルなので何もしないままではドメインで接続できません。
内向きDNSを建ててドメインをサーバーIPに向けてやればできないこともないですが私はもう二度とBINDには触れたくありません。
じゃあhostsを書き換えてやろうとなるわけですね。なりますね。
sudo echo "192.168.xxx.yyy $domain" >> /etc/hosts
これで無事接続できるようになりますね。
が、これが家の内外で使うノートPCだとまた不具合が出るわけです。
外出先でsshしたくなったらhostsの上記の行をコメントアウトしてやらなければなりません。。。
なんとダサい。
というわけで今回はこんな煩わしい問題を解決するためのソリューションのご提案です。
なにするん?
手軽に用意したかったこともあり、ネットワーク状況の変更を見て家であればhostsを~みたいなことはしませんでした。
しかし、よく使うターミナル上手軽に変更したかったので適当なディレクトリにパスを通してそこにスクリプトを置くことでコマンドっぽく実行できるようにします。
どうするん?
具体的には適当なディレクトリにスクリプトと外用、内用のhostsをそれぞれ置いて、スクリプトから/etc/hostsへコピーします。
$ mkdir ~/programfiles
$ cd ~/programfiles
$ echo "export PATH=\$PATH:$(pwd)" >> ~/.bash_profile
$ source ~/.bash_profile
$ cp /etc/hosts ./
$ cp hosts homehosts
$ cp hosts otherhosts
$ vi homehosts # 書く
#!/bin/bash
SCRIPT_DIR=$(cd $(dirname "${BASH_SOURCE:-$0"); pwd)
if [ $# -ne 1 ]; then
echo "please host type in first argument"
exit -1
fi
HOST=${1}
if [ $HOST = "home" ]; then
eval "sudo cp ${SCRIPT_DIR}/homehosts /etc/hosts"
echo "set host file to home preset"
exit 0
elif [ $HOST = "other" ]; then
eval "sudo cp ${SCRIPT_DIR}/otherhosts /etc/hosts"
echo "set host file to other preset"
exit 0
else
echo "please give args \"home\" or \"other\""
exit -1
fi
使う
$ change home
# 家用hostsへ
$ change other
# 外用hostsへ
もっといい感じのソリューションがあれば教えてください