Existe uma maneira mais direta de sair de um processo mestre de controle OpenSSH e excluir seu arquivo de soquete do que com a ajuda dos programas lsof
ou fuser
e sem conhecer o host de destino (detalhes da conexão), conforme sugerido pela resposta aceita desta pergunta ? Pensei em algo assim na linha de:
$ ssh -O exit -S ~/.ssh/7eb92b0827f3e8e1e8591fb3d1a5cd1b94b758cb.socket
Estou perguntando porque estou procurando uma maneira de script para sair de cada conexão mestre de controle aberto toda vez que eu sair da minha conta de usuário. Não fazer isso faz com que meu computador openSUSE alimentado por sistema aguarde um tempo limite de dois minutos até que ele encerre com força a conexão mestre de controle ainda aberta desligando eventualmente.
Infelizmente , o programa cliente do OpenSSHssh
requer o host de destinoControlPath
e o padrão de nome de arquivo para deduzir o caminho real do arquivo para o arquivo de soquete. Eu, pelo contrário, pensei no método mais direto de fornecer o arquivo de soquete concreto através da -S ctl_path
opção do programa.
Na seção global do meu arquivo de configuração do cliente OpenSSH em todo o sistema, configurei o recurso de multiplexação de conexão do OpenSSH da seguinte maneira:
ControlMaster auto
ControlPath ~/.ssh/%C.socket
ControlPersist 30m
Por favor, note que eu quero manter o padrão de nome de arquivo para arquivos de soquete, ou seja, fazer o hash da string do token %l%h%p%r
com o token %C
.
Alguma ideia?
Isso funciona para mim usando apenas o arquivo de soquete para o mestre de controle:
NOTA: Você também pode usar
ssh -S ~/.ssh/<controlfile> ...
, que é uma forma um pouco mais curta do acima.Exemplo
Aqui está um exemplo em que já estabeleci uma conexão com um servidor remoto:
E com ele desconectado:
Se ainda estivesse conectado, isso o forçaria a sair imediatamente:
Não está claro para mim, mas parece ser potencialmente um bug,
ssh
pois requer um argumento adicional no final, mesmo queblah
não tenha sentido no contexto dos switches que estou usando.Sem ele me dá isso:
Informação da versão
OSX CentOS 7.xConfirmei que em ambas as versões, a necessidade do argumento falso adicional era necessária.
ATUALIZAÇÃO #1
Eu levantei isso como um bug em potencial para o upstream do OpenSSH e eles responderam da seguinte forma:
Referências
Eu escrevi um utilitário que facilita o gerenciamento de conexões SSH ControlMaster. Chama-se
cmc
: TimidRobot/cmc: ControlMaster ControlMaster - Facilita o gerenciamento de conexões SSH ControlMaster .