Réponses:
Par défaut, lorsque vous exécutez une commande sur la machine distante à l'aide de ssh, un TTY n'est pas alloué pour la session distante. Cela vous permet de transférer des données binaires, etc. sans avoir à faire face aux erreurs de TTY. C'est l'environnement fourni pour la commande exécutée computerone
.
Cependant, lorsque vous exécutez ssh sans commande à distance, il attribue un TTY, car vous exécuterez probablement une session shell. Ceci est prévu par la ssh otheruser@computertwo.com
commande, mais en raison de l'explication précédente, aucun TTY n'est disponible pour cette commande.
Si vous voulez un shell computertwo
, utilisez ceci à la place, ce qui forcera l'allocation de TTY lors de l'exécution à distance:
ssh -t user@computerone.com 'ssh otheruser@computertwo.com'
Cela est généralement approprié lorsque vous exécutez éventuellement un shell ou un autre processus interactif à la fin de la chaîne ssh. Si vous deviez transférer des données, il n'est ni approprié ni nécessaire de les ajouter -t
, mais chaque commande ssh contiendrait une commande produisant des données ou une commande -consuming, telle que:
ssh user@computerone.com 'ssh otheruser@computertwo.com "cat /boot/vmlinuz"'
Il existe un meilleur moyen d'utiliser SSH en tant que relais: utilisez l' ProxyCommand
option. Vous aurez besoin d'une clé sur la machine cliente qui vous permettra de vous connecter au deuxième ordinateur (la clé publique est de toute façon recommandée pour utiliser SSH dans la plupart des cas). Mettez ceci dans votre ~/.ssh/config
et lancez ssh computertwo
.
Host computerone
HostName computerone.com
UserName user
Host computertwo
HostName computertwo.com
UserName otheruser
ProxyCommand ssh computerone exec nc %h %p
nc
est netcat . Toutes les versions disponibles feront l'affaire.
Vous pouvez utiliser l'option PROXY Jump dans 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.
Donc, si je dois me connecter à hostB mais que je dois d'abord passer par hostA pour y arriver. Normalement je voudrais
ssh hostA
[user@hostA ~]$ ssh hostB
Je fais maintenant ça
ssh -J hostA hostB
[user@hostB ~]$
Vous pouvez remplacer une option de configuration SSH "RequestTTY" à partir de la ligne de commande.
Mon exemple de travail cd-serv-one.sh
commence /bin/bash
dans une session SSH après l'exécution de plusieurs commandes:
#!/bin/bash
ssh -o "requestTTY=yes" User@ExampleHostName "cd /home/myPathFoo/myPathBar; /bin/bash"
Et maintenant, je cours juste ./cd-serv-one.sh
pour démarrer une session SSH nécessaire.
ssh
!