Lo pseudo-terminale non verrà allocato perché stdin non è un terminale


14

Sto cercando di impostare l'hsh SSH automatico attraverso un server che non ha nc.

Funziona dalla riga di comando:

ssh -A gateway ssh steve@target

(Ho aggiunto la mia chiave pubblica all'agente SSH).

Tuttavia, aggiungendolo a ~ / .ssh / config non:

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.

Tentare di forzare il problema con -tè divertente ma inutile.

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.

Di più -t? Non buono.

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

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

È possibile? La maggior parte dei tutorial (ad es. Http://www.arrfab.net/blog/?p=246 ) suggerisce l'utilizzo nc.


La conclusione è che netcat è richiesto?
— MountainX-for-Monica,

Sembra così. In questo caso, sono stato in grado di installarlo, risolvendo il mio problema, ma non sempre ho quel lusso.
— Steve Bennett,

Vedi la mia risposta qui sotto per due modi in cui sono stato in grado di farlo senza netcat.
— MountainX-for-Monica,

Risposte:


13

SSH ProxyCommand senza netcat

Il ProxyCommand è molto utile quando gli host sono accessibili solo indirettamente. Con netcat è relativo stretto in avanti:

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

Qui {gw} e {host} sono segnaposto per il gateway e l'host.

Ma è anche possibile quando netcat non è installato sul gateway:

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

/ Dev / tcp è una funzione integrata di bash standard. I file non esistono. Per verificare se bash ha questa funzione integrata usa run:

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

... sul gateway.

Per assicurarsi che venga utilizzato bash, utilizzare:

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

E funziona anche insieme a ControlMaster.

(Aggiornato il 22 ottobre per includere kill per ripulire il gatto in background) (Aggiornato il 3 marzo 2011 per rendere più chiari i segnaposto e spiegare / dev / tcp)

Credito al 100% a roland schulz. Ecco la fonte:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
vedi ulteriori informazioni utili nei commenti lì.

C'è anche altro qui:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack -4r1ubuntu /

AGGIORNAMENTO : ecco qualcosa di nuovo da Marco

In riferimento a un ProxyCommand in ~ / .ssh / config dove si ha una linea come questa:

ProxyCommand ssh gateway nc localhost %p

Marco dice:

Non hai bisogno di netcat se usi una versione recente di OpenSSH. Puoi sostituire nc localhost% p con -W localhost:% p.

Il risultato sarebbe simile al seguente:

ProxyCommand ssh gateway -W localhost:%p

8

Grande T, non piccola t.

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

Il mio script usato per restituire quel messaggio, e non lo fa più.

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

Uso authorized_keyon the other_system per fare in modo che questo esegua un comando:

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

3

Prova questo:

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

Aspetta, come è diverso da quello che ho provato?
— Steve Bennett,

@SteveBennett La differenza è che questo non tenta solo di allocare un TTY sul secondo sistema, ma anche sul primo.
— Hauke ​​Laging

è esattamente lo stesso comando che ho citato con il risultato "divertente ma inutile"?
— Steve Bennett,

@SteveBennett L'ho letto male, anzi. Il mio obiettivo era di avere -tentrambe le connessioni e l'ho visto in quello sbagliato. Ho modificato la mia risposta.
— Hauke ​​Laging,

Ah. Bene, ancora non va bene. Ho provato tutte le combinazioni.
— Steve Bennett,

-3

Potresti provare la seguente tecnica di ssh'ing in server1 seguita da ssh'ing in server2.

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

Farlo in questo modo funziona per me.


1
Spiega di più ... Cosa fa questo comando e come è utile risolvere la risposta.
— Tejas,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.