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

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

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

#!/bin/bash

function usage {
    echo -e "
    $(basename 
#!/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
) is a tool for ... Usage: $(basename
#!/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
) [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の恩恵を得られそうだ。

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

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

*