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
tmux実行時に特定のコマンドだけを実行させたい場合、「.tmux.conf」ファイルに以下のように記述してやればいい。
.tmux.confset -g default-command "/bin/bash -c 'COMMAND'"
例えば、 lssh で指定した接続先へのsshだけを許可させるようにすると、以下のようになる。
.tmux.confset -g default-command "/bin/bash -c 'lssh'"
使いこなしているかと言われると全然だけど、とりあえずこんな感じにすることで踏み台でtmuxの恩恵を得られそうだ。