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.conf
set -g default-command "/bin/bash -c 'COMMAND'"

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

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

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