Stdin bir terminal olmadığı için sözde terminal ayrılmayacak


14

Nc olmayan bir sunucu üzerinden otomatik SSH atlamalı kurmaya çalışıyorum.

Bu komut satırından çalışır:

ssh -A gateway ssh steve@target

(Genel anahtarımı SSH temsilcisine ekledim).

Ancak, ~ / .ssh / config dosyasına eklemek:

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.

Sorunu zorlamaya çalışmak -teğlenceli ama yararsızdır.

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.

Daha fazla -tmı? İyi değil.

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

$ ssh target
tcgetattr: Inappropriate ioctl for device


^CKilled by signal 2.

Mümkün mü? Çoğu öğretici (ör. Http://www.arrfab.net/blog/?p=246 ) kullanılmasını önerir nc.


Netcat'in gerekli olduğu sonucu var mı?
MountainX

Öyle görünüyor. Bu örnekte, sorunumu çözerek yükleyebildim - ama her zaman bu lüksüm yok.
Steve Bennett

Netcat olmadan bunu yapabilmemin iki yolu için aşağıdaki cevabımı görün.
MountainX

Yanıtlar:


13

Netcat olmadan SSH ProxyCommand

ProxyCommand, ana bilgisayarlara yalnızca dolaylı olarak erişilebildiğinde çok kullanışlıdır. Netcat ile ileriye doğru göreceli boğazı vardır:

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

Burada {gw} ve {host} ağ geçidi ve ana bilgisayar için yer tutuculardır.

Ancak netcat ağ geçidine kurulmadığında da mümkündür:

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

/ Dev / tcp, standart bash'ın yerleşik bir özelliğidir. Dosyalar mevcut değil. Bash'de bu özellik yerleşik kullanım olup olmadığını kontrol etmek için:

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

... ağ geçidinde.

Bash'in kullanıldığından emin olmak için şunu kullanın:

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

Ve hatta ControlMaster ile birlikte çalışır.

(22 Ekim'de arka plan kedisini temizlemek için öldürmeyi içerecek şekilde güncellendi) (Yer tutucuları daha net ve açık / dev / tcp yapmak için 3 Mart 2011'de güncellendi)

Roland Schulz'a% 100 kredi. İşte kaynak:
http://www.rschulz.eu/2008/09/ssh-proxycommand-without-netcat.html Buradaki
yorumlarda daha yararlı bilgilere bakın.

Burada daha fazlası da var:
http://www.linuxjournal.com/content/tech-tip-tcpip-access-using-bash
http://securityreliks.securegossip.com/2010/08/enabling-devtcp-on-backtrack -4r1ubuntu /

GÜNCELLEME : İşte Marco'dan yeni bir şey

~ / .Ssh / config içindeki ProxyCommand'a referansla, şöyle bir satır vardır:

ProxyCommand ssh gateway nc localhost %p

Marco diyor ki:

OpenSSH'nin son bir sürümünü kullanıyorsanız netcat'e ihtiyacınız yoktur. Nc localhost% p yerine -W localhost:% p yazabilirsiniz.

Sonuç şöyle görünecektir:

ProxyCommand ssh gateway -W localhost:%p

8

Büyük T, küçük t değil.

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

Betiğim bu iletiyi döndürüyordu ve artık vermiyor.

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

Bunu authorized_keybir komut çalıştırmak için other_system kullanın:

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

3

Bunu deneyin:

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

Bekle, denediklerimden farkı nedir?
Steve Bennett

@SteveBennett Fark, bunun sadece ikinci sistemde bir TTY tahsis etmediği, aynı zamanda ilk sistemde de çalıştığıdır.
Hauke ​​Laging

"eğlenceli ama yararsız" sonucu ile bahsettiğim komutun aynısı?
Steve Bennett

@SteveBennett Gerçekten yanlış okudum. Amacım -ther iki bağlantıda da bulunmaktı ve yanlış bağlantıda gördüm. Cevabımı düzenledim.
Hauke ​​Laging

Ah. Hala iyi deđil. Tüm kombinasyonları denedim.
Steve Bennett

-3

Aşağıdaki sunucu1'e ssh'ing tekniğini ve ardından server2'ye ssh'ing'i deneyebilirsiniz.

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

Böyle yapmak benim için işe yarıyor.


1
Lütfen daha fazlasını açıklayın ... Bu komutun ne yaptığı ve cevabı çözmenin ne kadar yararlı olduğu.
Tejas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.