El pseudo-terminal no se asignará porque stdin no es un terminal


14

Estoy tratando de configurar el salto SSH automático a través de un servidor que no tiene nc.

Esto funciona desde la línea de comando:

ssh -A gateway ssh steve@target

(He agregado mi clave pública al agente SSH).

Sin embargo, agregarlo a ~ / .ssh / config no:

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.

Intentar forzar el problema con -tes divertido pero inú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.

¿Más -t? No es bueno.

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

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

es posible? La mayoría de los tutoriales (por ejemplo, http://www.arrfab.net/blog/?p=246 ) sugieren usar nc.


¿Es la conclusión de que se requiere netcat?
MountainX-for-Monica

Lo parece. En este caso, pude instalarlo, resolviendo mi problema, pero no siempre tengo ese lujo.
Steve Bennett

Vea mi respuesta a continuación para conocer dos maneras en que pude hacer esto sin netcat.
MountainX-for-Monica

Respuestas:


13

SSH ProxyCommand sin netcat

El ProxyCommand es muy útil cuando los hosts son accesibles indirectamente. Con netcat es relativamente estrecho hacia adelante:

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

Aquí {gw} y {host} son marcadores de posición para la puerta de enlace y el host.

Pero también es posible cuando netcat no está instalado en la puerta de enlace:

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

/ Dev / tcp es una característica incorporada de bash estándar. Los archivos no existen. Para comprobar si bash tiene esta función de uso incorporada, ejecute:

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

... en la puerta de entrada.

Para asegurarse de que se usa bash, use:

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

E incluso funciona junto con ControlMaster.

(Actualizado el 22 de octubre para incluir kill para limpiar el gato de fondo) (Actualizado el 3 de marzo de 2011 para aclarar los marcadores de posición y explicar / dev / tcp)

100% de crédito para roland schulz. Aquí está la fuente:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
ver más información útil en los comentarios allí.

También hay más aquí:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack -4r1ubuntu /

ACTUALIZACIÓN : aquí hay algo nuevo de Marco

En referencia a un ProxyCommand en ~ / .ssh / config donde uno tiene una línea como esta:

ProxyCommand ssh gateway nc localhost %p

Marco dice:

No necesita netcat si usa una versión reciente de OpenSSH. Puede reemplazar nc localhost% p con -W localhost:% p.

El resultado se vería así:

ProxyCommand ssh gateway -W localhost:%p

8

Gran T, no pequeña t.

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

Mi script solía devolver ese mensaje, y ya no lo hace.

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

Utilizo el authorized_keyen el otro_sistema para hacer que esto ejecute un comando:

from="my.mydomain.com",command="bin/remotely-run" ssh-rsa ... 

3

Prueba esto:

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

Espera, ¿cómo es eso diferente de lo que he intentado?
Steve Bennett

@SteveBennett La diferencia es que esto no solo trata de asignar un TTY en el segundo sistema, sino también en el primero.
Hauke ​​Laging

es exactamente el mismo comando que mencioné con el resultado "divertido pero inútil"?
Steve Bennett

@SteveBennett Lo he leído mal, de hecho. Mi objetivo era tener las -tdos conexiones y la vi en la incorrecta. He editado mi respuesta.
Hauke ​​Laging

Ah Bueno, aún no está bien. Probé todas las combinaciones.
Steve Bennett

-3

Puede probar la siguiente técnica de ssh'ing en el servidor1 seguido de ssh'ing en el servidor2.

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

Hacerlo así me funciona.


1
Por favor explique más ... Qué hace este comando y cómo es útil para resolver la respuesta.
Tejas
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.