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.

원격 사용자 및 원격 포트에 관계없이 동일한 로컬 사용자가 시작한 모든 세션간에 동일한 원격 호스트에 대한 연결을 공유하고 싶습니다. 마스터 클라이언트의 소켓은 로컬 사용자의 홈 디렉토리 아래에 있어야합니다.



답변

“여러 세션이 같은 소켓을 같은 호스트에 연결하여 공유해야한다고 생각했습니다.”

그들은 할 수있다. 그러나 ControlPath로그인하려는 사용자에 관계없이을 통해 기존 연결을 사용하여 호스트에 연결하면 연결 의 원래 사용자로 로그인됩니다. 예를 들어 “어딘가”에 대한 연결이 설정되지 않은 경우 :

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=yes bob@somewhere

이 세션은 bob @ somewhere입니다.

ssh -o ControlPath=~/.ssh/%h -o ControlMaster=no sue@somewhere

동일한 ControlPath를 사용하고 설정했기 때문에이 세션 bob @ somewhere가됩니다 ControlMaster=no. 인 경우 ControlMaster=yessue로 로그인했지만 ssh는 다음과 같이 ControlPath 인수를 무시합니다 man ssh_config.

ControlMaster가 ‘no’로 설정된 동일한 ControlPath 사용하여 추가 세션을이 소켓에 연결할 수 있습니다 .

이것에 대한 증거로서, ControlMaster=yes두 경우 모두, bob이 종료 ~/.ssh/somewhere하면 “sue”세션이 여전히 실행되고 있어도 ControlPath 소켓 이 사라집니다. 이는 sue 세션이 해당 소켓을 사용하지 않았 음을 의미 합니다 .

따라서 동일한 연결을 사용하려면 %h괜찮지 만 여러 원격 사용자로 연결을 공유 할 수 없다는 점에 유의하십시오 .ssh는 허용하지 않습니다.


답변

동일한 서버에서도 여러 사용자와 여러 포트를 사용할 수 있습니다. 나 자신은 회사 인트라넷의 수백 대의 시스템에 연결하며 대부분 다른 기능이나 앱 서버를 가진 여러 사용자가 있습니다. 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

보시다시피 userB와 OpenSSH 세션을 얻지 않고 userA와 원본을 얻습니다. 즉, 홈 디렉토리, 권한 및 인증 자체는 예상 한 것이 아닙니다. 이것을 사용하여 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