"ssh_config(5)" 매뉴얼 페이지에서 ControlPath
옵션에 최소한 %h
, %p
및 %r
자리 표시자가 포함되어야 한다고 제안하는 이유는 무엇입니까?고유하게 식별합니다.공유 연결당?
내 생각엔 회의가 여러 번 있어야 할 것 같아공유하다동일한 호스트의 동일한 소켓에 연결합니다. 따라서 다음과 같이 간단한 정의를 갖는 것이 타당하지 않을까요?
ControlPath ~/.cache/ssh/mux/%h
다음과 같은 것 대신에:
ControlPath ~/.cache/ssh/mux/%r@%h:%p
첫 번째 정의를 이해하면 동일한 원격 호스트의 서로 다른 원격 포트에 있는 서로 다른 원격 사용자의 여러 세션 간에 연결이 공유됩니다.
나는 호스트 기본값 섹션에 첫 번째 정의를 갖고 싶습니다. 그러면 충분할 것입니다 ssh -o ControlMaster=no
.
원격 사용자 및 원격 포트에 관계없이 동일한 로컬 사용자가 시작한 모든 세션 간에 동일한 원격 호스트에 대한 연결을 공유하고 싶습니다. 마스터 클라이언트의 소켓은 로컬 사용자의 홈 디렉터리에 위치해야 합니다.
답변1
"여러 세션이 동일한 소켓을 공유하고 동일한 호스트에 연결되어야 한다고 생각합니다."
그들은 할 수있다. 그러나 기존 연결을 통해 호스트에 연결하는 경우 ControlPath
어떤 사용자로 로그인하든 관계없이 해당 연결의 원래 사용자로 로그인됩니다. 예를 들어, "어딘가"에 대한 연결이 설정되지 않았습니다.
ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere
이번 회의는 bob@somewhere입니다.
ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere
이번 회의는반품예 bob@somewhere는 동일한 ControlPath를 사용하고 설정했기 때문입니다 ControlMaster=no
. 그렇다면 ControlMaster=yes
sue로 로그인되지만 ssh는 다음과 같이 ControlPath 매개변수를 무시합니다 man ssh_config
.
다른 세션이 이 소켓에 연결할 수 있습니다.동일한 ControlPath 사용ControlMaster가 "아니오"로 설정됨.
증거로, 두 경우 모두 bob이 종료될 때 ControlMaster=yes
"sue" 세션이 계속 실행 중이더라도 ControlPath 소켓이 사라지는 경우, 즉~/.ssh/somewhere
소켓은 sue 세션에서 사용된 적이 없습니다..
따라서 동일한 연결을 사용하고 싶다면 그렇게 %h
할 수 있지만 주의하세요.여러 다른 원격 사용자로 연결을 공유할 수 없습니다.-- ssh는 이것을 허용하지 않습니다.
답변2
동일한 서버라도 여러 사용자와 여러 포트를 사용할 수 있습니다. 나 자신은 기업 인트라넷에 있는 수백 개의 시스템에 연결하는데, 그 중 대부분은 서로 다른 기능이나 응용 프로그램 서버를 가진 여러 사용자가 있습니다. userA에 대한 액세스는 userB에 대한 액세스와 매우 다르며 기본 연결도 달라야 합니다. 더 간결하게 실행하려면 다음을 수행하십시오.
$ ssh -n -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userA localhost sleep 10 & # create the master connection and background it
$ ssh -o ControlMaster=auto -o ControlPath=~/.cache/ssh/mux/%h -l userB localhost whoami
userA
보시다시피, 사용자 B와의 OpenSSH 세션이 아니라 사용자 A와의 원래 세션을 얻습니다. 이는 홈 디렉터리, 권한, 심지어 인증 자체도 예상한 것과 다르다는 것을 의미합니다. 이 기능을 사용하면 userB의 디렉터리에 있는 파일을 삭제하려고 하면 a) 잘못된 파일일 수 있고 b) 잘못된 권한이 있을 수 있습니다.
당신이 할 의향이 있다면안 돼요단일 포트를 사용하여 하나의 서버에서 여러 사용자에게 연결하면 %h
충분합니다. 파일 에서 다음 ~/.ssh/config
을 사용해야 합니다.
ControlMaster=auto # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes
이 ControlPersist
옵션을 사용하면 기본 연결이 종료되거나 종료될 때까지 백그라운드에서 열린 상태로 유지됩니다 ssh -O exit
. 이것은 "설정하고 잊어버리는" 훌륭한 기능입니다.
하지만 만약 있다면어느하나의 호스트에서 여러 사용자에게 연결할 수 있다면 더 안전한 것이 필요할 것입니다.
ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes