내 빌드 서버에 tmux
을 사용합니다. 최근에는 작은 .bashrc
스크립트를 작성하여 종료 할 경우 세션을 tmux
에 연결하는 작업을 자동화합니다. 나는 ssh
그것이 바로 TMUX 창 내부에 달려 mosh
을 사용할 때마다 문제가mosh : 서로 다른 PID로 두 번 소스 .bashrc
# Automate tmux Startup
if [ -z "$TMUX" ]; then
# we're not in a tmux session
if [ `ps -o comm= -p $PPID` == "sshd" ]; then
# even VNC can have $SSH_TTY and $SSH_CONNECTION set so we cant find out
# if we want to attach to tmux during ssh so we need to see if parent
# process is sshd see
# http://unix.stackexchange.com/questions/145780/linux-ssh-connection-is-set-even- without-sshing-to-the-server
# Only attach to tmux if its me
WHOAMI=$(whoami)
if tmux has-session -t $WHOAMI 2>/dev/null; then
tmux -2 attach-session -t $WHOAMI
else
echo "Start tmux with username as session name 'tmux new -s $WHOAMI' "
fi
fi #parent process check
else
echo "Inside tmux"
fi
을 다음과 같이 스크립트 보인다. 이 스크립트를 제거한 후 mosh를 사용하여 수동으로 tmux에 연결하면이 문제가 발생하지 않습니다. 위의 스크립트를 .bashrc
에 넣으면이 문제가 발생합니다.
내 생각에 mosh는 .bashrc
이 완료 될 때까지 기다리고 있으며 무한정 기다리고 있으며 마우스와 키스트 로크 컨트롤을 tmux
으로 전달하지 않습니다. 다른 터미널에서 tmux
세션을 종료하여이 사실을 확인한 결과 mosh
이 복구되었고 이전에 버퍼링 된 키 입력을 실행하려고 시도했습니다.
이상한 점은 mosh
이 (가) ps -o comm= -p $PPID == "sshd"
수표를 통과 한 것입니다. 이는 mosh
의 경우 쉘의 프로세스 이름이 bash
이고 쉘의 상위 프로세스 이름이 mosh-server
이고 sshd
이 아니기 때문입니다. 추가 조사에 따르면 mosh
은 sshd
으로 .bashrc
을 두 번 한 번 실행하고 mosh-server
으로 한 번 실행하는 것으로 나타났습니다. 이것은 을 .bashrc
에 넣음으로써 재현 가능합니다. tmux attach
은 sshd
에서 일어나고 mosh
은 영원히 걸려있었습니다.
내가 찾은 간단한 해결 방법은
MOSH 사용자 @ 서버를 수행하는 것이 었 - '-t 첨부 TMUX
나는 화재뿐만 아니라 내 SSH와 비슷한 일을 할 수 whoami` 명령을 클라이언트 측에서 제거하고 .bashrc 스크립트를 모두 없애면 클라이언트 측에 서버 측 자동화를 넘겨주고 싶지 않습니다.
사실 mosh
은 잘못한 것 같습니다. PID 당 한 번만 .bashrc
파일을 소싱합니다. tmux
에 대한 차단 세션을 실행하는 것은 나쁜 설계라고 생각합니다. tmux
도 터미널을 필요로하므로 백그라운드 프로세스로 시작할 수 없으므로 &
도 작동하지 않습니다. 이 문제를 해결하는 다른 방법이 있습니까? 나는 정보를 사용할 수있는 SSHd를 설정하는 sshd와 ssh 클라이언트를 설정하는 mosh 클라이언트 사이에 distingusih가있을 수 있다고 생각한다.