tmux
기존 tmux 세션에서 컴퓨터로 SSH를 통해 연결할 때 새 창을 만들고 싶습니다. 그러나 새 시스템에서 tmux 세션을 시작하고 싶지 않습니다!
자동으로 시작 .bashrc
되도록 다음이 포함되어 있습니다 .tmux
if [[ "$TERM" != "screen" ]]
then
# try to attach to existing session, or start a new one
tmux attach-session -t "$USER" || tmux -2 new-session -s "$USER"
exit
fi
나는 또한 다음과 같은 ssh
기능을 가지고 있습니다.
alias ssh='ssh_func'
ssh_func (){
if [[ "$TERM" == "screen" ]]; then
tmux new-window -n "$1" "ssh $@";
else
/usr/bin/ssh "$@";
fi
}
이것은 잘 작동하지만 SSH를 통해 연결된 컴퓨터에서 tmux 세션을 시작하고 싶지 않습니다. 이렇게 하면 동일한 터미널 창에 2개의 세션이 제공되기 때문입니다. .bashrc
ssh 명령이 tmux 세션에서 호출되는 경우 tmux가 컴퓨터에서 시작되지 않도록 내 컴퓨터에 넣을 수 있는 것이 있습니까?
저는 PuTTY와 tmux 1.5를 사용하고 있습니다.
답변1
게시한 코드가 주어지면 tmux 내에서 ssh를 실행하는 경우 $TERM
= 가 있으므로 screen
tmux 창에 연결하려고 시도하지 않을 것입니다. 즉, 이미 가지고 있는 코드가 예상대로 작동해야 합니다. 수상한 일이 일어나고 있습니다. 도트 파일이 변수와 혼동되지 않는지 확인하십시오 TERM
(매우 드물지만 수정해야 하는 경우 TERM
매우 특정한 상황에서만 이 작업을 수행하도록 하십시오. 특히 그렇다면 변경하지 마십시오 screen
).
답변2
환경 변수의 존재를 테스트할 수 있습니다 SSH_CONNECTION
. 환경 변수가 정의되어 있으면 SSH에서 쉘이 시작된 것입니다. 예를 들어:
if [ -n "$SSH_CONNECTION" ]; then
# running within SSH session, do not start tmux
...
else
# logged in from console/terminal, start tmux
tmux ...
fi
이 변수에는 공백으로 구분된 4개의 값(클라이언트 IP 주소, 클라이언트 포트 번호, 서버 IP 주소, 서버 포트 번호)이 포함되어 있습니다. 이를 사용하여 보다 복잡한 일치를 수행할 수 있습니다. 예를 들면 다음과 같습니다.
case "$SSH_CONNECTION" in
client.ip.v4.addr*)
# client is client.ip.v4.addr != this host's addr
echo "you're connecting from a remote host, starting tmux"
tmux ...
;;
*server.ip.v4.addr)
# if server.ip.v4.addr == this hosts' address, then SSH_CONNECTION
# is not inherited from another connection
echo "SSH_CNNECTION is not stale"
;;
'')
# no SSH_CONNECTION at all
;;
esac
환경 변수에 대한 자세한 내용은 SSH_CONNECTION
환경 섹션을 참조하세요.SSH(1) 맨페이지.