Os servidores de produção da minha empresa (FOO, BAR ...) estão localizados atrás de dois servidores de gateway (A, B). Para conectar-me ao servidor FOO, tenho que abrir uma conexão ssh com o servidor A ou B com meu nome de usuário JOHNDOE e, em A (ou B), posso acessar qualquer servidor de produção que abra uma conexão SSH com um nome de usuário padrão (vamos chamá-lo WEBBY).
Então, cada vez que tenho que fazer algo como:
ssh johndoe@a
...
ssh webby@foo
...
# now I can work on the server
Como você pode imaginar, esse é um problema quando preciso usar scp
ou se preciso abrir rapidamente várias conexões.
Eu configurei uma chave ssh e também estou usando .ssh / config para alguns atalhos.
Eu queria saber se posso criar algum tipo de configuração ssh para digitar
ssh foo
e deixe o SSH abrir / encaminhar todas as conexões para mim. É possível?
Editar
A resposta do womble é exatamente o que eu estava procurando, mas parece que agora não posso usar o netcat porque ele não está instalado no servidor de gateway.
weppos:~ weppos$ ssh foo -vv
OpenSSH_5.1p1, OpenSSL 0.9.7l 28 Sep 2006
debug1: Reading configuration data /Users/xyz/.ssh/config
debug1: Applying options for foo
debug1: Reading configuration data /etc/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh a nc -w 3 foo 22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/xyz/.ssh/identity type -1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_rsa type 1
debug2: key_type_from_name: unknown key type '-----BEGIN'
debug2: key_type_from_name: unknown key type 'Proc-Type:'
debug2: key_type_from_name: unknown key type 'DEK-Info:'
debug2: key_type_from_name: unknown key type '-----END'
debug1: identity file /Users/xyz/.ssh/id_dsa type 2
bash: nc: command not found
ssh_exchange_identification: Connection closed by remote host
fonte
Você pode usar a diretiva ProxyCommand no seu arquivo ~ / .ssh / config, por exemplo, para usar o netcat como o relé:
Você usaria apenas 'ssh server2'. As informações da página de manual desta diretiva são encontradas em 'man ssh_config'
fonte
Prefiro uma abordagem diferente que mantenha um túnel pré-autenticado no servidor de gateway. Em
~/.ssh/config
:Então em
.bashrc
:Então, para se conectar ao foo:
A primeira vez que você o conectar, o autenticará em "a" e abrirá um túnel ssh persistente e em segundo plano. Chamadas subsequentes para "s" serão abertas quase instantaneamente através do túnel pré-autenticado.
Funciona bem.
fonte
Esse tipo de funcionalidade existe nas versões mais recentes do OpenSSH e pode ser usado fazendo
Onde
server2
está o seu destino pretendido eserver1
é o seu host proxy. Você pode facilitar isso usando aProxyCommand
opção na sua configuração ssh, algo como:fonte
Quando
netcat
não estiver disponível no proxy, tente este truque:Então você deve ser capaz
ssh foo
.Além disso, se você possui uma versão recente do ssh em a (por exemplo, com o
-W
comando para encaminhar entrada e saída padrão), poderá usar:Finalmente, só porque achei legal (e não porque funcionará no seu caso em particular, devido a diferenças de nome de usuário), a postagem de blog de um amigo mostra como tornar esse tipo de coisa dinâmica e encadear proxies SSH recursivamente em cadeia (junto com algumas coisas que não funcionam bem):
E então
ssh machine1/machine2
deve lhe dar uma conchamachine2
, encapsuladamachine1
.Gostaria de saber se o uso de
sed
comandos personalizados em vez dedirname
ebasename
pode não resolver o problema com diferentes nomes de usuário?fonte
Isso pode ser conseguido fazendo
ssh -At johndoe@a ssh webby@foo
. O-A
comando encaminha seu agente ssh (para que você não precise se autenticar novamente no proxy), enquanto-t
garante que exista um terminal no proxy. A seguinte função bash pode ser útil:fonte
O Netcat não está instalado
a
. Quando você executassh host "command arg"
,command
é executadohost
, não na máquina local.fonte
Desde o OpenSSH 7.3 (01/08/2016), a
ProxyJump
opção e o-J
sinalizador da linha de comando correspondentes estão disponíveis para permitir uma indireção mais simples através de um ou mais bastiões do SSH ou "jump hosts".Isso remove a dependência do
nc
comando externo, conforme encontrado na solução da Womble .estabelecerá uma conexão SSH da estação de trabalho para o servidor gateway
a
como usuário johndoe e encapsulará a sessão SSH para hospedar o usuário da Web por meio disso.Para simplificar a criação de definições de host para você
~/.ssh/config
e sua, você pode simplesmente executarssh foo
fonte