.ssh/configに記載した接続先へ楽に接続できるスクリプト作ってみた
.ssh/configに記載した接続先へ楽に接続できるスクリプト作ってみた
ども。ちゅらっぷすの平田です。
唐突ですがみなさん、SSH接続好きですか?僕は好きです。
SSHログインする際、どのように接続してるのでしょうか。
色々あるかと思いますが、接続先が増えると面倒ですよね。
- ターミナル経由で毎回コピペして接続
- 接続情報探すのが手間
- SSHクライアントなどで接続
- ブックマーク名での検索機能がない場合がある
- スクリプトにコマンドを記載して実行
- そのディレクトリを探すのが手間
まぁ、全部こじつけというか言い訳なんですが、仕事柄ターミナルをよく使うので、なんかスクリプトで楽できないかなぁと思い立ちました。
楽するために苦労しようというエンジニアの謎の行動理論ですね。
環境等について
- Mac(MacBook Pro - High Sierra 10.13.6 で動作確認できた)
- ターミナル利用 できる
- alias の設定ができる
- 雑なスクリプトでも多少は我慢できる
- .ssh/config がある
- 指摘するときは優しく指摘できる
以上の点を踏まえてスクリプトを見ていただけたらなぁと思います。
mac以外では動作検証してないのでご了承ください。
.ssh/config について
.ssh/config には、SSHログイン時の接続先情報を記載できます。
Host alias(設定名)
User ユーザー名
HostName ホスト名とかIPアドレス
port 22
IdentitiesOnly yes
IdentityFile ~/.ssh/鍵ファイルのパス
今回、.ssh/config
のaliasを利用して、
$ ssh alias
というようにalias(設定名)でSSH接続できる点を利用したいと思います。
スクリプト
#!/bin/bash
## color settings(カラーコードの定数)
readonly C_GREEN=32;
readonly C_YELLOW=33;
readonly C_BLUE=34;
readonly C_MAGENTA=35;
readonly C_CYAN=36;
readonly C_L_RED=91;
readonly C_L_GREEN=92;
readonly C_L_YELLOW=93;
readonly C_L_BLUE=94;
readonly C_L_MAGENTA=95;
readonly C_L_CYAN=96;
## この関数にカラーコードに対応する定数と文字列を投げると、色付きで文字列が吐かれる
function f_c()
{
printf "\033[${1}m${2}\033[0m\n";
}
## .ssh/config の'alias'を取得し、リスト化
hosts=`cat /Users/user_name/.ssh/config | grep "^Host " | sed -E 's/^Host //g'`;
c_count=0
account_list=()
f_c ${C_GREEN} "========================="
f_c ${C_GREEN} "|| アカウント一覧 ||"
f_c ${C_GREEN} "========================="
for HOST_LIST in ${hosts[@]}
do
account_list+=(${HOST_LIST})
c_count=`expr ${c_count} + 1`
c_count=`printf %3d ${c_count}`
echo "${c_count} : ${HOST_LIST}"
done
f_c ${C_GREEN} "========================="
echo ""
f_c ${C_GREEN} "アカウントを選択してください"
f_c ${C_L_YELLOW} "Ctl+C で終了します"
## 接続先番号を指定し、接続を行う
read select_account
echo "選択アカウント"
ssh ${account_list[$select_account-1]}
ぶっちゃけカラーコード指定して色付き文字を出力するところが一番難儀でしたw
もうちょっと綺麗に描きたかったけど個人用だからいいかな。。。
aliasを設定してスクリプトを楽に実行する
.bash_profile
に以下を追記します。
alias slssh='sh ~/シェルスクリプトの/長ったらしい/憎たらしい/パス/ファイル名.sh'
追記したらターミナルを再起動するか、
source ~/.bash_profile
を実行。するとaliasとしてslssh
が登録されてますので、
sh ~/シェルスクリプトの/長ったらしい/憎たらしい/パス/ファイル名.sh
と入力ぜずとも、slssh
と入力するだけでスクリプトを実行できます。
使用感
実は当記事の執筆時点ですでに1年ほどこのスクリプトを利用してましたが、まぁ悪くもなく良くもなくといったところですかね。
alias(Host)の検索機能が欲しいですな。
画像では省略されてて見えないですが、31個の接続先の中から接続したい項目を探して番号を入力。Enter。
問題なく社内のUbintuサーバーにSSHログインできてます。
まとめ
多少楽にはなりましたが、流石にこれ以上接続先が増えるとしんどいですね。
定期的に整理した方が良いかも。
また、このスクリプトはあくまで個人用ですので、グループワーク等には向いてないと思います。
接続先情報の修正が発生した際、10人でこのスクリプトを利用していた場合は全員、.ssh/config
を修正しなければいけませんので。。。
ということを踏まえると、ぶっちゃけ。。。
SSHクライアントツールの方が楽な気がする
ちなみに余談ですが、scpコマンドを利用する時もSSH接続のaliasが使えるので、その点、.ssh/config
に記載して正解だったなぁと思いました。
※グループワークでは絶対に使わないでくださいね。責任とれませんのでw
あなたへオススメするかもしれない記事☆
Author And Source
この問題について(.ssh/configに記載した接続先へ楽に接続できるスクリプト作ってみた), 我々は、より多くの情報をここで見つけました https://qiita.com/joe_hirata/items/e24ed50e3be5c5fcb0be著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .