Commandes sur SSH ne produisant pas de sortie


1

J'exécute ce qui suit dans un terminal Unix:

client$: ssh host "cat foo.txt"

et attendons que la sortie du fichier et la connexion ssh soient fermées, c'est-à-dire:

bar
client$:

Ce qui se passe réellement, c'est qu'aucune sortie n'est produite par cat et que le terminal est toujours sur l'hôte distant:

server$ :

Je peux maintenant faire le "cat foo.txt" et obtenir le contenu du fichier et fermer la connexion avec la sortie ou la déconnexion. Ouptut de SSH est:

debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug1: Sending environment.
debug1: Sending env LANG = en_GB
debug2: channel 0: request env confirm 0
debug1: Sending command: cat foo.txt
debug2: channel 0: request exec confirm 0
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152

J'ai un autre compte d'utilisateur pour lequel cela fonctionne, mais jusqu'à présent, je n'ai pas trouvé de différence dans la configuration / le profil susceptible de provoquer ce comportement. La sortie ssh pour un compte d'utilisateur actif est:

debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug1: Sending environment.
debug1: Sending env LANG = en_GB
debug2: channel 0: request env confirm 0
debug1: Sending command: cat foo.txt
debug2: channel 0: request exec confirm 0
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152
bar
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd close
debug2: channel 0: close_read
debug2: channel 0: input open -> closed
debug2: channel 0: almost dead
debug2: channel 0: gc: notify user
debug2: channel 0: gc: user detached
debug2: channel 0: send close
debug2: channel 0: is dead
debug2: channel 0: garbage collecting
debug1: channel 0: free: client-session, nchannels 1
debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.2 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0
debug1: Exit status 0

Y at-il des paramètres évidents qui pourraient être la cause? Ou des options de ssh qui peuvent aider? J'ai jeté un œil dans .bashrc et .bash_profile mais je ne vois rien qui puisse en être la cause. Les deux utilisateurs n’ont pas .ssh / config, je pense donc que la configuration s’applique à l’ensemble du système dans / etc / ssh / ssh_config. L'exécution de ssh -n host "cat foo.txt" ferme la connexion mais toujours aucune sortie de cat:

debug1: Entering interactive session.
debug2: callback start
debug2: client_session2_setup: id 0
debug1: Sending environment.
debug1: Sending env LANG = en_GB
debug2: channel 0: request env confirm 0
debug1: Sending command: cat foo.txt
debug2: channel 0: request exec confirm 0
debug2: callback done
debug2: channel 0: open confirm rwindow 0 rmax 32768
debug2: channel 0: rcvd adjust 2097152
debug2: channel 0: read<=0 rfd 5 len 0
debug2: channel 0: read failed
debug2: channel 0: close_read
debug2: channel 0: input open -> drain
debug2: channel 0: ibuf empty
debug2: channel 0: send eof
debug2: channel 0: input drain -> closed
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd close
debug2: channel 0: almost dead
debug2: channel 0: gc: notify user
debug2: channel 0: gc: user detached
debug2: channel 0: send close
debug2: channel 0: is dead
debug2: channel 0: garbage collecting
debug1: channel 0: free: client-session, nchannels 1
debug1: Transferred: stdin 0, stdout 0, stderr 0 bytes in 0.3 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 0.0
debug1: Exit status 0

Réponses:


1

Essayez d'utiliser ssh -T "username@"host" "cat foo.txt"

-T arrête l'affectation d'un terminal pseudo-tty

ou à défaut d'essayer

echo "cat foo.txt" | ssh "username"@"host"

qui devrait juste fonctionner comme ssh "username"@"host" "cat foo.txt"

juste pensé à un autre au lieu de l'écho, essayez d'utiliser

ssh -t -t "username"@"host" "cat foo.txt"


Essayé -T avant mais ça n'aide pas. Le truc avec écho semble fonctionner. J'aimerais toujours savoir quelle est la cause de ce comportement.
— Kam

Cela pourrait être un certain nombre de choses, je sais qu’il ya eu un problème il ya quelque temps: ssh et .bash_rc ne jouaient pas ensemble lorsque des sessions non interactives étaient utilisées. quel système d'exploitation et quelle version de ssh utilisez-vous sur le client et le serveur?
— Fegnoid

Les deux boîtes sont sur RHEL 5.5 et OpenSSH_4.3p2
— Kam

Le serveur limite-t-il le nombre de connexions SSH? SElinux est-il également actif?
— Fegnoid

SElinux est désactivé. Impossible de trouver quoi que ce soit dans la configuration limitant les connexions SSH, donc je suppose qu'il est défini sur la valeur par défaut.
— Kam

0

Je ne sais pas si cela est pertinent pour votre cas, mais j'ai pu résoudre un problème similaire sous Ubuntu 16.10 en modifiant .bashrc:

De:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) exit;;
esac

À:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

Donc, si vous pouvez trouver un exitemplacement quelconque dans vos fichiers de configuration, c'est peut-être ce qui fait les méchants .

Il suffit de le remplacer par un return.

À la vôtre,
Gus

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.