저는 일반 텍스트 SSH pty에서 원격으로 작업할 때 (주로) tmux를 사용합니다. 연결이 끊어지는 경우에 매우 유용합니다. 나는 오랜 시간(몇 시간에서 며칠까지) 컴퓨팅 작업을 실행하고 이를 확인하기 위해 다른 원격 호스트에서 연결합니다. 이것이 제가 tmux를 사용하는 거의 유일한 용도입니다. 저는 전문가와는 거리가 멀기 때문에 제 질문은 아마도 매우 간단할 것입니다. 그러나 답을 찾을 수 없습니다.
$SSH_CONNECTION
현재 클라이언트 컴퓨터의 데몬과 어떻게든 (Ssh 터널 없이 직접) 통신하기 위해 쉘 변수에서 클라이언트 주소를 읽고 구문 분석하는 명령이 호스트 컴퓨터에 있습니다 . 원래 다른 컴퓨터에서 시작된 세션에 연결하면 tmux에서 문제가 발생합니다. tmux 세션의 가장 낮은 쉘은 시작 시 이 변수를 캡처했으며 클라이언트 시스템의 주소를 갖습니다.시작하다회의 자체가 아니라 회의현재 연결됨그것에.
간단한 해결책은 tmux .bashrc
세션에서 이 변수를 완전히 재설정하여 도구가 tmux 세션 내부의 클라이언트 연결과 통신을 시도하지 않도록 하는 것입니다(결국 실패하면 명령줄에서 도구를 제공할 수 있음). 하나의 IP를 추측해 보세요). 나는 $TMUX
.bashrc에서 IP 주소를 완전히 캡처하는 것을 피하기 위해 env 변수의 존재에 의존할 수 있다고 믿습니다 .
하지만 올바른 방법은 tmux attach
명령을 실행하는 bash에서 이 변수를 어떻게든 높이는 것입니다. 원격의 tmux가 이미 실행 중인 첫 번째 셸의 환경을 수정하지 못할 수도 있기 때문에 완전히 자동화될 수 없다는 것을 알고 있습니다. 하지만 멋진 tmux 스크립트를 사용하여 tmux
명령을 실행하는 프로세스에서 환경 변수를 추출하고 attach
(부착된 SSH 세션 머신이 환경에 올바르게 설정되어 있음) 세션 tmux 변수 어딘가에 값을 저장할 수 있습니다(존재하는지 여부) ) ? export SSH_SESSION=....
;
간단히 말해서:tmux attach
숙련된 tmuxer처럼 번거로움을 최소화하면서 명령을 실행하는 다른 pty 연결의 환경 변수 값을 기반으로 연결한 세션에서 환경 변수를 설정하는 방법을 원합니다 .
1 이는 좋지 않거나 안전한 접근 방식은 아니지만 실제로는 그렇습니다. 우리는 과학 컴퓨팅에서 동료 과학자들이 작성한 이상한 것들을 많이 사용해야 합니다. 이 경우처럼 반드시 좋은 소프트웨어 엔지니어는 아니었습니다. 이번 세기에는 다르게 하고 싶지만 이 제품은 30년이 되었습니다.
답변1
SSH_CONNECTION은 기본적으로 업데이트 환경에 있으므로 연결 시 세션 환경에서 업데이트되며, 다음과 같이 tmux 내에서 실행 중인 셸에 복사할 수 있습니다.
eval $(tmux showenv -s SSH_CONNECTION)