Combine dois comandos SSH

2

O primeiro comando ssh é feito no meu computador, eu insiro a senha da chave e, em seguida, insiro o segundo comando ssh enquanto estiver logado no servidor.

ssh -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000
#i get prompted for a password to use the key 
ssh -D 6001 -p 6666 localhost -l dancloud
#i get prompted for a password associated with user dancloud
  1. Como posso combinar esses comandos em um único comando para obter os mesmos resultados? Vejo que o netcat e o ProxyCommand podem ser úteis aqui, mas não conseguiram descobrir.
  2. Como posso codificar as duas senhas e colocá-las em um script bash? Espero que eu possa fazer ./login.sh e executar todo esse código com senhas codificadas no script e alcançar o mesmo resultado final.
por appleLover 04.05.2016 / 20:52

2 respostas

4

A primeira possibilidade é óbvia (observe a opção -t ):

ssh -t -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 \
   "ssh -D 6001 -p 6666 localhost -l dancloud"

Com ProxyCommand é mais complicado à primeira vista, mas conceitualmente você precisa apenas de um encaminhamento ( netcat versão não é mais recomendado, usando a opção -W é mais elegante):

Host proxy
  Hostname 54.152.188.55
  User admin
  IdentityFile cloudkey
Host target
  Hostname localhost
  Port 6666
  User dancloud
  DynamicForward 6000
  ProxyCommand ssh -W %h:%p proxy

e, em seguida, conecte apenas usando ssh target (veja ... agora você nem precisa de um script bash:)).

Explicação: O segundo ssh também está sendo executado em seu computador e, portanto, o soquete de encaminhamento dinâmico (proxy SOCKS) é criado diretamente no seu computador.

Sobre as senhas, não é algo aconselhável (as senhas devem ser secretas ), mas pode funcionar com sshpass na frente do ssh apropriado .

A página de manual para ssh explica a opção -W como:

-W host:port

Requests that standard input and output on the client be forwarded to host on port over the secure channel. Implies -N, -T, ExitOnForwardFailure and ClearAllForwardings. Works with Protocol version 2 only.

Em combinação com ProxyCommand , ele se conecta ao hostname solicitado e, em seguida, fornece basicamente uma versão incorporada de netcat (conecta o IO padrão ao par host : port (o argumento).

    
por 04.05.2016 / 22:00
1

Você deve conseguir realizar o que deseja fazer com algo semelhante a:

ssh -i cloudkey -L 6000:localhost:6001 [email protected] -p 9000 -t "ssh -D 6001 -p 6666 localhost -l dancloud"

o -t flag força uma pseudo-tty na primeira máquina e executa o código restante na primeira máquina; neste caso, ssh para o túnel dancloud. As aspas duplas podem ser opcionais, para comandos como:

ssh 10.0.0.0 -t ssh 192.168.0.0

as aspas não são necessárias, eu uso este comando como é todos os dias (com IPs corretos obviamente). Mas sua milhagem pode variar se falhar sem as aspas, basta adicioná-las ;-)

Quanto às senhas de codificação em um script, a única maneira que posso pensar em fazer isso seria usar um script esperar , mas isso requer um pouco de conhecimento do código TCL. Seria melhor usar apenas o encaminhamento ssh e a autenticação baseada em chave em todas as máquinas aplicáveis. Você pode conferir um programa simples chamado keychain e simplesmente adicionar ao seu arquivo $HOME/.bashrc algo como: %código% e o keychain localizará sua chave ssh e criará seu ssh-agent, se necessário, ou usará um existente, isso será útil se você usar keychain --agents ssh em vários terminais.

Se você usar a autenticação baseada em chave, basta adicionar ssh ao seu ssh args:

-A

Espero que isso ajude você a progredir.

    
por 04.05.2016 / 22:02