Yanıtlar:
Varsayılan olarak, uzak makinede ssh kullanarak bir komut çalıştırdığınızda , uzak oturum için bir TTY ayrılmaz . Bu, TTY tuhaflıklarıyla uğraşmak zorunda kalmadan ikili verileri vb. Aktarmanıza olanak tanır. Bu, üzerinde yürütülen komut için sağlanan ortamdır computerone.
Bununla birlikte, ssh komutunu uzak bir komut olmadan çalıştırdığınızda, bir TTY tahsis eder, çünkü bir kabuk oturumunu çalıştırıyor olabilirsiniz. Bu ssh otheruser@computertwo.comkomut tarafından bekleniyor , ancak önceki açıklama nedeniyle, bu komut için TTY yok.
Bir kabuk istiyorsanız computertwo, bunun yerine, uzaktan çalıştırma sırasında TTY tahsisatını zorlayacak:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Bu genellikle sonunda ssh zincirinin sonunda bir kabuk veya başka bir etkileşimli işlem gerçekleştiriyorsanız uygundur. Verileri transfer edecekseniz, ne uygun ne de eklemek zorunda değildir -t, ancak daha sonra her ssh komutu aşağıdaki gibi bir veri üreten veya tüketen komut içerecektir:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
SSH'yi röle olarak kullanmanın daha iyi bir yolu var: ProxyCommandseçeneği kullanın. İstemci makinede ikinci bilgisayara oturum açmanıza izin veren bir anahtarınızın olması gerekir (genel anahtar, yine de çoğu durumda SSH kullanmanın önerilen yoludur). Bunu içine koy ~/.ssh/configve koş ssh computertwo.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
ncolduğu netcat'in . Mevcut çeşitli sürümlerden herhangi biri yapacaktır.
Ssh içindeki PROXY Jump seçeneğini kullanabilirsiniz.
-J [user@]host[:port]
Connect to the target host by first making a ssh connection to the jump host and then establishing a TCP forwarding to the ultimate destination from there. Multiple jump hops may be specified
separated by comma characters. This is a shortcut to specify a ProxyJump configuration directive.
Eğer hostB'ye bağlanmam gerekiyorsa, oraya ulaşmak için önce hostA'dan geçmem gerekiyor. Normalde
ssh hostA
[user@hostA ~]$ ssh hostB
Şimdi bunu yapıyorum
ssh -J hostA hostB
[user@hostB ~]$
Bir SSH yapılandırma seçeneğini "RequestTTY" komut satırından geçersiz kılabilirsiniz.
Çalışma örneğim birden çok komut çalıştırdıktan sonra SSH oturumunda cd-serv-one.shbaşlar /bin/bash:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
Ve şimdi sadece ./cd-serv-one.shgerekli bir SSH oturumu başlatmak için koşuyorum .
ssh!