O pseudo-terminal não será alocado porque stdin não é um terminal

12

Estou tentando configurar o SSH automático passando por um servidor que não possui nc.

Isso funciona na linha de comando:

ssh -A gateway ssh steve@target

(adicionei minha chave pública ao agente SSH).

No entanto, adicioná-lo ao ~ / .ssh / config não:

Host target
  User steveb
  ProxyCommand ssh -A gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

A tentativa de forçar o problema com -t é divertida, mas não é útil.

ProxyCommand ssh -A -t gateway ssh steve@targetip

$ ssh target
Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.


^CKilled by signal 2.

Mais -t ? Não é bom.

ProxyCommand ssh -A -t -t gateway ssh steve@targetip

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

Isso é possível? A maioria dos tutoriais (por exemplo, link ) sugere o uso de nc .

    
por Steve Bennett 08.07.2013 / 05:18

4 respostas

12

SSH ProxyCommand sem netcat

O ProxyCommand é muito útil quando os hosts são apenas indiretamente acessíveis. Com netcat é relativamente estreito para a frente:

ProxyCommand ssh {gw} netcat -w 1 {host} 22

Aqui {gw} e {host} são espaços reservados para o gateway e o host.

Mas também é possível quando o netcat não está instalado no gateway:

ProxyCommand ssh {gw} 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'

O / dev / tcp é um recurso interno do bash padrão. Os arquivos não existem. Para verificar se o bash tem esse recurso embutido, execute:

cat < /dev/tcp/google.com/80 

... no gateway.

Para garantir que o bash seja usado, use:

ProxyCommand ssh {gw} "/bin/bash -c 'exec 3<>/dev/tcp/{host}/22; cat <&3 & cat >&3;kill $!'"

E até funciona em conjunto com o ControlMaster.

(Atualizado em 22 de outubro para incluir matar para limpar o gato de fundo) (Atualizado em 3 de março de 2011 para tornar os marcadores de espaço mais claros e explicar / dev / tcp)

100% de crédito para a Roland Schulz. Aqui está a fonte: link
veja mais informações úteis nos comentários lá.

Há também mais aqui: link
link

UPDATE : aqui está uma novidade de Marco

Em referência a um ProxyCommand em ~ / .ssh / config, onde um tem uma linha como esta:

ProxyCommand ssh gateway nc localhost %p

Marco diz:

You don't need netcat if you use a recent version of OpenSSH. You can replace nc localhost %p with -W localhost:%p.

O resultado seria assim:

ProxyCommand ssh gateway -W localhost:%p
    
por 27.07.2013 / 00:42
8

Big T, não pouco t.

-T' Disable pseudo-tty allocation.
-t' Force pseudo-tty allocation. 

Meu script costumava retornar essa mensagem e não faz mais.

/usr/bin/ssh -T -q -i $HOME/.ssh/one_command other_system

Eu uso o authorized_key no outro_sistema para fazer isso executar um comando:

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 
    
por 29.08.2013 / 01:02
3

Experimente:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip
    
por 08.07.2013 / 06:22
-3

Você pode tentar a seguinte técnica de ssh'ing no server1 seguido por ssh'ing no server2.

$ ssh -t user1@server1 ssh -t user2@server2 

Fazer assim funciona para mim.

    
por 10.09.2014 / 13:46