Eu tenho dois servidores, server1
e server2
, e posso me conectar server2
via server1
:
localUser@localMachine $ ssh user1@server1
user1@server1 $ ssh user2@server2
user2@server2 $
Eu posso fazer isso em uma etapa usando:
localUser@localMachine $ ssh -t user1@server1 ssh user2@server2
user2@server2 $
Eu quero ser capaz de simplesmente executar a ssh server2
partir da minha máquina local e conectar diretamente. Eu poderia configurar o comando acima como um alias, mas prefiro fazer isso por meio do ~/.ssh/config
. O problema é que preciso usar as credenciais ssh presentes no server1 ao conectar ao server2 e não quero copiá-las para minha máquina local. Isso significa que a maneira "normal" de configurar isso, adicionando o seguinte ao meu local ~/.ssh/config
, falha:
Host server1
Hostname server1.example.com
User user1
Host server2
Hostname server2.example.com
User user2
ProxyJump server1
Se eu tentar conectar agora, recebo:
$ ssh server2
[email protected]: Permission denied (publickey).
Isso ocorre porque preciso usar a ~/.ssh/id_rsa_pub
chave server1
e não a que tenho na minha máquina local. Então, como posso configurar meu local ~/.ssh/config
para que ele se conecte ao server2
, via server1
e usando as credenciais presentes no server1
?
Todas as máquinas são caixas Linux, os controles remotos estão executando o Ubuntu Server 18.04.4 e minha máquina local está executando o Arch Linux.
Eu tentei a solução dada na resposta de Hauke e adicionei o seguinte ao meu ~/.ssh/config
:
Host server1server2
Hostname server1
User user1
RemoteCommand ssh [email protected]
Isso quase funciona! Agora posso me conectar server2
usando ssh server1server2
, mas não recebo um prompt:
localUser@localMachine $ ssh server1server2
Pseudo-terminal will not be allocated because stdin is not a terminal.
hostname
server2
Como você pode ver acima, estou conectado server2
e posso até executar comandos lá, mas não estou recebendo um prompt. Eu então tentei adicionar -t -t
ao ssh
comando no arquivo de configuração:
Host server1server2
Hostname server1
User user1
RemoteCommand ssh -t -t [email protected]
Isso me deu um prompt, mas os arquivos de inicialização do meu shell não estão sendo lidos e pressionar Ctrl+ Cmata a ssh
conexão. Eu preciso que isso se comporte exatamente da mesma maneira como se eu tivesse feito ssh user2@server1
e depois do server1 ssh user2@server2
. Isso significa que meus arquivos normais de inicialização do shell devem ser lidos e um Ctrl + C não deve matar a sessão.
Existem pelo menos duas possibilidades de executar um comando no destino por meio da configuração SSH:
command="command"
Então
ou
E depois
ssh server1server2
@αғsнιη me indicou https://serverfault.com/q/337274/155817 em um comentário e, com base nisso, consegui fazê-lo funcionar usando as seguintes linhas no meu
~/.ssh/config
arquivo local:Agora posso conectar diretamente:
A mensagem acima é causada pelo
ssh-add
que está adicionando minha identidade do servidor1 ao agente de autenticação em execução no servidor2. Isso não deve ser um problema, no entanto.