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
Kam
la source

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"

Fegnoid
la source
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

Gustavo Carreno
la source