Problema: ssh
LocalCommand
é executado no lado local (cliente), não no controle remoto como você deseja. Não há RemoteCommand
opção, mas você pode hackear a funcionalidade em seu arquivo de configuração. Note, todos estes assumem que o seu diretório remotehost:.gnupg
existe antes da mão.
Opção 1: Use duas especificações de host separadas em seu ~/.ssh/config
:
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%n-mount -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
Host remote-mount
HostName remotehost
ForwardAgent yes
RemoteForward 10000 localhost:22
Desvantagens: ambas as entradas precisam sair para cada host que você deseja que este ponto de montagem.
Opção 2: Combine opções ssh e encaminhamento de porta no LocalCommand:
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
Observe que a diferença sutil nas duas linhas LocalCommand
é o uso de% n no primeiro exemplo e% h no segundo. Isso funcionará, mas tem uma grande ASSUMPTION : você NUNCA ssh para um host pelo seu nome verdadeiro e somente por meio de "nomes curtos" que existem no arquivo .ssh/config
, caso contrário, você terminará com um loop infinito de ssh
connections tentando executar seu LocalCommand
.
Opção 3: Use o SSH Multiplexing para configurar apenas uma conexão com o controle remoto:
Host remote
HostName remotehost
PermitLocalCommand yes
LocalCommand ssh -f %r@%h -o RemoteForward="10000 localhost:22" -o ForwardAgent=yes -p %p sshfs -p 10000 %u@localhost:%d/.gnupg .gnupg
ControlMaster auto
ControlPersist 30m
ControlPath ~/.ssh/controlmasters/%r@%h:%p
Acho que essa é a única solução vencedora e pode até funcionar em Host *
regras E não sofre desvantagens. Ele até resolve o problema de que as segundas sessões ssh no mesmo host NÃO tentarão remontar o mesmo diretório via sshfs.
Advertência: Uma questão final que não me preocupei em resolver: seu controle remoto sshfs
persistirá por muito tempo depois que você fizer logout do host remoto. Na verdade, ele nunca será unmount
, a menos que seu localhost fique off-line ou a conexão seja interrompida.
Você pode verificar outra opção para umount
that sshfs
mount ao efetuar logout do host remoto, talvez usando idéias como esta . Ou você pode jogar com o LocalCommand
para executar algo que vigia e se auto-calcula depois que ele vê algum evento acionador ocorrer, mas parece frágil na melhor das hipóteses.
Outra opção seria envolver os comandos ssh
em algum shell ou talvez usar ProxyCommand
para fazer algo complicado, mas deixarei isso como um exercício para o leitor.