Apenas encontrei. ssh -O check HOST
Estou usando as seguintes opções no meu ~/.ssh/config
para ativar a multiplexação de conexão:
ControlMaster auto
ControlPath ~/.ssh/control/master-%r@%h:%p
No entanto, isso tem o problema irritante de que o primeiro shell a se conectar a um determinado servidor deve ser o último a ser desconectado, porque é a conexão principal que todas as outras conexões estão usando. Então, se você sair do mestre, parece apenas travar. Para resolver isso, eu gostaria de envolver o ssh com um script que verifica se o arquivo mestre de controle existe e, se não, inicia um processo mestre ssh em segundo plano. Então começaria uma sessão ssh escrava.
Para conseguir isso, meu script teria que determinar o caminho para o arquivo de controle que o ssh usaria. Isso implicaria analisar as opções de linha de comando e arquivos de configuração do ssh e implementar a lógica para determinar o ControlPath. Existe alguma maneira de perguntar ao ssh qual caminho ele usaria, para que eu possa verificá-lo?
Dos meus testes, a resposta aceita:
ssh -O check HOST
só fornecerá o arquivo de controle se ele não sair
Control socket connect(<path to control file>): No such file or directory
caso contrário
Master running (pid=<number>)
No entanto, grep e ssh -G
sempre fornecerão o caminho.
-G Causes ssh to print its configuration after evaluating Host and Match blocks and exit.
>>> ssh -G HOST | grep controlpath
controlpath <path to control file>
Nota: Se você usar %l
ou %C
(por exemplo) no arquivo de configuração ssh, isso será avaliado para a máquina local.
Tags ssh multiplexing