OpenSSH ssh의 ControlPath 옵션에서 단순히 %h를 사용하면 어떨까요?

OpenSSH ssh의 ControlPath 옵션에서 단순히 %h를 사용하면 어떨까요?

"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=yessue로 로그인되지만 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

관련 정보