ssh踏み台用にtmuxでセッションがあったらセッション選択画面を表示させるサンプルスクリプト(セッションがなかったら新規作成)

tmuxの恩恵(セッションの保持とか)は受けたいけど、tmuxに慣れておらずうまく使えない。
個人ではなく、チームで使う場合とかだとなおさらそういった事があるので、踏み台サーバでssh接続時にセッションがあったら選択画面を、そうでない場合は新規セッションを開始するようなスクリプトを作ってみる。

鍵認証だと仮定して、以下のようなスクリプトをauthorized_keysのcommandで指定してやることで、接続時にセッションの有無を確認して再接続or新規セッション作成を選択させることができる。
(一応、こっちにも残してる)

#!/bin/bash
function usage {
echo -e "
$(basename ${0}) is a tool for ...
Usage:
$(basename ${0}) [command]"
}
function tmux_yesno() {
title="found session"
msg="Would you like to connect to an existing session?"
yesno=$(whiptail --title "$title" --yesno "$msg" 15 80 3>&1 1>&2 2>&3)
return $?
}
function tmux_select() {
title="select tmux session"
msg="please select tmux session"
select_session=$(whiptail --notags --menu "test" 20 120 12 ${s_list[@]} 3>&1 1>&2 2>&3)
[ $? = 0 ] && tmux a -t $select_session
}
function tmux_start(){
title="tmux session name"
msg="Please input yout tmux session name"
default="$(date +%Y%m%d_%H%M%S)_session"
session_name=$(whiptail --inputbox "$msg" 15 80 "$default" --title "$title" 3>&1 1>&2 2>&3)
[ ! $session_name = "" ] && tmux new -s $session_name
}
# get tmux session list
s_strlist=$(tmux ls -F "#{session_id} #{session_name}_#{?session_attached,(attached),}")
tmux_flg=$?
OLD_IFS=$IFS
IFS=$'\n' s_list=($s_strlist)
IFS=$OLD_IFS
echo $tmux_flg
if [ $tmux_flg = 1 ];then
tmux_start
else 
tmux_yesno
flg=$?
if [ $flg = 0 ];then
tmux_select
else
tmux_start
fi
fi
Sponsored Links

tmux実行時に特定のコマンドだけを実行させたい場合、「.tmux.conf」ファイルに以下のように記述してやればいい。

■.tmux.conf

set -g default-command "/bin/bash -c 'COMMAND'"

 

例えば、lsshで指定した接続先へのsshだけを許可させるようにすると、以下のようになる。

■.tmux.conf

set -g default-command "/bin/bash -c 'lssh'"

 

使いこなしているかと言われると全然だけど、とりあえずこんな感じにすることで踏み台でtmuxの恩恵を得られそうだ。

 


Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。

*