É mais fácil encadear ssh com ssh do que encadear ssh com sudo. Então, alterando a configuração do servidor ssh é ok, sugiro abrir o ssh para a raiz de cada servidor, mas apenas do localhost. Você pode fazer isso com uma cláusula Match
em sshd_config
:
PermitRootLogin no
Match Host localhost
PermitRootLogin yes
Em seguida, você pode configurar uma cadeia de autenticação baseada em chave de usuário remoto para usuário local e de usuário local para raiz. Você ainda tem uma trilha de autenticação para que seus registros digam quem está logado como root, e as etapas de autenticação são as mesmas que se o sudo estivesse envolvido.
Para se conectar a um servidor como root, defina um alias em ~/.ssh/config
da seguinte forma:
Host server-root
HostName server.example.com
User root
ProxyCommand "ssh server.example.com nc %h %p"
Se você insistir em usar sudo
, acredito que precisará de comandos separados, pois sudo
insiste na leitura de um terminal (mesmo que tenha um ticket para sua conta) ¹ e nenhum arquivo usual os métodos de cópia (scp, sftp, rsync) suportam a interação com um terminal remoto.
Continuando com o ssh e o sudo, seus comandos propostos podem ser simplificados. Em cada lado, se você tiver sudo configurado para não pedir uma senha novamente, você pode executá-lo uma vez para superar o requisito de senha e outra hora para copiar o arquivo. (Você não pode copiar o arquivo diretamente porque o prompt de senha fica no caminho.)
ssh -t source 'sudo true'
ssh -t target 'sudo true'
ssh -t source 'sudo cat squid.conf' |
ssh -t target 'sudo tee /etc/squid/squid.conf'
¹ a menos que você tenha NOPASSWD
, mas você não estaria perguntando isso.