Risposte:
Per impostazione predefinita, quando si esegue un comando sul computer remoto utilizzando ssh, un TTY non viene allocato per la sessione remota. Ciò consente di trasferire dati binari, ecc. Senza dover gestire le stranezze TTY. Questo è l'ambiente fornito per il comando eseguito su computerone
.
Tuttavia, quando si esegue ssh senza un comando remoto, esso alloca un TTY, perché è probabile che si stia eseguendo una sessione di shell. Ciò è previsto dal ssh otheruser@computertwo.com
comando, ma a causa della spiegazione precedente, non è disponibile TTY per quel comando.
Se vuoi una shell attiva computertwo
, usa questa opzione, che forzerà l'allocazione TTY durante l'esecuzione remota:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Questo è in genere appropriato quando alla fine si esegue una shell o un altro processo interattivo alla fine della catena SSH. Se avessi intenzione di trasferire dati, non è né appropriato né richiesto aggiungere -t
, ma ogni comando ssh conterrebbe un comando di produzione o di consumo di dati, come:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
C'è un modo migliore per usare SSH come relè: usare l' ProxyCommand
opzione. Dovrai disporre di una chiave sul computer client che ti consenta di accedere al secondo computer (la chiave pubblica è comunque il modo consigliato di utilizzare SSH nella maggior parte dei casi). Metti questo nel tuo ~/.ssh/config
e corri ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
è netcat . Qualsiasi delle diverse versioni disponibili lo farà.
È possibile utilizzare l'opzione PROXY Jump in ssh
-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.
Quindi, se ho bisogno di connettermi a hostB ma devo prima passare attraverso hostA per arrivarci. Normalmente lo farei
ssh hostA
[user@hostA ~]$ ssh hostB
Adesso lo faccio
ssh -J hostA hostB
[user@hostB ~]$
È possibile ignorare un'opzione di configurazione SSH "RequestTTY" dalla riga di comando.
Il mio esempio di lavoro cd-serv-one.sh
inizia /bin/bash
nella sessione SSH dopo aver eseguito più comandi:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
E ora corro solo ./cd-serv-one.sh
per iniziare una sessione SSH necessaria.
ssh
!