Por que não usar simplesmente% h na opção ControlPath do OpenSSH ssh?

11

Por que as páginas de manual "ssh_config (5)" recomendam que a opção ControlPath contenha pelo menos os espaços reservados %h , %p e %r para que identifique de forma exclusiva cada conexão compartilhada?

Eu pensei que várias sessões deveriam compartilhar o mesmo soquete com uma conexão com o mesmo host. Não faria sentido ter uma definição simples como:

ControlPath ~/.cache/ssh/mux/%h

Em vez de algo como:

ControlPath ~/.cache/ssh/mux/%r@%h:%p

No meu entendimento com a primeira definição, uma conexão é compartilhada entre várias sessões com diferentes usuários remotos, para o mesmo host remoto, em diferentes portas remotas.

Eu quero ter a primeira definição na seção padrão do host, de modo que seja suficiente dizer ssh -o ControlMaster=no .

Eu quero compartilhar a conexão com o mesmo host remoto entre todas as sessões iniciadas pelo mesmo usuário local, independentemente do usuário remoto e da porta remota. O soquete do cliente mestre deve estar sob o diretório inicial do usuário local.

    
por Tim Friske 02.09.2013 / 15:59

2 respostas

11

"I thought that multiple sessions should share the same socket with a connection to the same host."

Eles podem. No entanto, observe que se você se conectar a um host usando uma conexão existente por meio de ControlPath , independentemente do usuário no qual você pretende fazer login, você fará login como o usuário original da conexão. Por exemplo, sem conexão estabelecida com "algum lugar":

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

Esta sessão é bob @ em algum lugar.

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

Esta sessão também será bob @ em algum lugar, porque você usou o mesmo ControlPath e configurou ControlMaster=no ; se ControlMaster=yes , você estaria logado como sue, mas ssh terá ignorado seu argumento ControlPath, como está implícito em man ssh_config :

Additional sessions can connect to this socket using the same ControlPath with ControlMaster set to 'no'.

Como prova disso, se ControlMaster=yes em ambos os casos, quando bob sai do soquete do ControlPath ~/.ssh/somewhere desaparecerá mesmo que a sessão "sue" ainda esteja em execução, significando que a sessão sue nunca usou esse soquete .

Então, se você quiser usar a mesma conexão, apenas %h é bom, mas cuidado que você não pode compartilhar uma conexão como vários usuários remotos diferentes - o ssh não permite.

    
por 02.09.2013 / 16:10
4

Você pode ter vários usuários e várias portas em uso até mesmo no mesmo servidor. Eu me conecto a centenas de sistemas nas intranets da empresa, a maioria tem vários usuários com diferentes funções ou servidores de aplicativos. O acesso ao userA é muito diferente do acesso ao userB, e a conexão master precisaria ser diferente. Mais sucintamente, se você fosse executar:

$ 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

Como você pode ver, não obtemos uma sessão do OpenSSH com userB, mas o original com userA. Isso significa que o diretório inicial, as permissões e até mesmo a autenticação em si não são o esperado. Usando isso, se você tentar excluir um arquivo no diretório do usuárioB, a) pode ser o arquivo errado eb) pode haver permissões erradas.

Se você nunca estiver se conectando a mais de um usuário em qualquer servidor usando uma única porta, então sim, usar %h pode ser suficiente. No seu arquivo ~/.ssh/config , você desejaria usar:

ControlMaster=auto  # use existing or create a master connection
ControlPath=~/.cache/ssh/mux/%h
ControlPersist=yes

Com a opção ControlPersist , a conexão principal permanece aberta em segundo plano até ser eliminada ou terminada com ssh -O exit . Este é um bom recurso para definir e esquecer.

Mas, se houver qualquer possibilidade de se conectar a mais de um usuário em qualquer host, você precisará de algo mais seguro:

ControlMaster=auto
ControlPath=~/.cache/ssh/mux/%r@%h:%p
ControlPersist=yes
    
por 02.09.2013 / 16:26