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
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:
À:
Donc, si vous pouvez trouver un
exit
emplacement 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
la source