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.com
komut 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: ProxyCommand
seç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/config
ve koş ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
olduğ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.sh
başlar /bin/bash
:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
Ve şimdi sadece ./cd-serv-one.sh
gerekli bir SSH oturumu başlatmak için koşuyorum .
ssh
!