Pseudo-Terminal wird nicht zugewiesen, da stdin kein Terminal ist

14

Ich versuche, automatisches SSH-Hopping über einen Server einzurichten, der nicht über nc verfügt.

Dies funktioniert über die Befehlszeile:

ssh -A gateway ssh steve@target

(Ich habe meinen öffentlichen Schlüssel zum SSH-Agenten hinzugefügt.)

Wenn Sie es jedoch zu ~ / .ssh / config hinzufügen, geschieht Folgendes nicht:

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.

Der Versuch, das Problem zu lösen, -tist amüsant, aber nicht hilfreich.

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.

Mehr -t's? Nicht gut.

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

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

Ist das möglich? Die meisten Tutorials (zB http://www.arrfab.net/blog/?p=246 ) empfehlen die Verwendung von nc.

Steve Bennett
quelle
Ist die Schlussfolgerung, dass Netcat erforderlich ist?
MountainX für Monica Cellio
Schaut so aus. In diesem Fall konnte ich es installieren und mein Problem lösen - aber ich habe nicht immer diesen Luxus.
Steve Bennett
In der folgenden Antwort sehen Sie zwei Möglichkeiten, wie ich dies ohne Netcat erreichen konnte.
MountainX für Monica Cellio

Antworten:

13

SSH ProxyCommand ohne Netcat

Der ProxyCommand ist sehr nützlich, wenn Hosts nur indirekt erreichbar sind. Mit netcat ist es relativ knapp:

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

Hier sind {gw} und {host} Platzhalter für das Gateway und den Host.

Es ist aber auch möglich, wenn netcat nicht auf dem Gateway installiert ist:

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

Das / dev / tcp ist eine integrierte Funktion der Standard-Bash. Die Dateien existieren nicht. So überprüfen Sie, ob in bash die Verwendung dieser Funktion integriert ist:

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

... auf dem Gateway.

Um sicherzustellen, dass bash verwendet wird, verwenden Sie:

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

Und es funktioniert sogar zusammen mit ControlMaster.

(Aktualisiert am 22. Oktober, um Kill zur Bereinigung der Hintergrundkatze einzuschließen.) (Aktualisiert am 3. März 2011, um Platzhalter deutlicher und erklärbarer zu machen.

100% gutschrift an roland schulz. Hier ist die Quelle:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html
Weitere nützliche Informationen finden Sie in den Kommentaren.

Es gibt auch mehr hier:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack -4r1ubuntu /

UPDATE : Hier ist etwas Neues von Marco

In Bezug auf einen ProxyCommand in ~ / .ssh / config, wo man eine Zeile wie diese hat:

ProxyCommand ssh gateway nc localhost %p

Marco sagt:

Sie benötigen netcat nicht, wenn Sie eine neuere Version von OpenSSH verwenden. Sie können nc localhost% p durch -W localhost:% p ersetzen.

Das Ergebnis würde so aussehen:

ProxyCommand ssh gateway -W localhost:%p
MountainX für Monica Cellio
quelle
8

Big T, nicht kleines t.

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

Mein Skript hat diese Nachricht zurückgegeben und funktioniert nicht mehr.

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

Ich benutze den authorized_keyBefehl auf dem anderen_System, um einen Befehl auszuführen:

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

Probieren Sie es aus:

ProxyCommand ssh -A -t gateway ssh -t steve@targetip
Hauke ​​Laging
quelle
Warten Sie, wie unterscheidet sich das von dem, was ich versucht habe?
Steve Bennett
@SteveBennett Der Unterschied besteht darin, dass hiermit nicht nur versucht wird, ein TTY auf dem zweiten System zuzuweisen, sondern auch auf dem ersten.
Hauke ​​Laging
Es ist genau derselbe Befehl, den ich mit dem Ergebnis "amüsant, aber nicht hilfreich" erwähnt habe.
Steve Bennett
@SteveBennett Ich habe das in der Tat falsch verstanden. Mein Ziel war es, das -tin beiden Zusammenhängen zu haben und ich sah es im falschen. Ich habe meine Antwort bearbeitet.
Hauke ​​Laging
Ah. Naja, immer noch nicht gut. Versuchte alle Kombinationen.
Steve Bennett
-3

Sie können die folgende Technik ausprobieren, um in Server1 zu ssh'en, gefolgt von ssh'en in Server2.

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

Es so zu machen, funktioniert für mich.

Jan Marius Evang
quelle
1
Bitte erklären Sie mehr ... Was dieser Befehl bewirkt und wie nützlich es ist, die Antwort zu lösen.
Tejas,