87 votes

SCP ne fonctionne pas lors de l'écho .bashrc?

J'ai deux utilisateurs de Fedora:

(i) Wani (ii) de la racine (tout à fait évident!)

Mon contenu .bashrc de l'utilisateur Wani sont:

 # .bashrc
 echo "Hello"
 # Source global definitions
 if [ -f /etc/bashrc ]; then
    . /etc/bashrc
 fi

 # User specific aliases and functions

Maintenant, après la connexion en root, je tape les commandes suivantes:

 [root@Dell Wani]#touch try.txt
 [root@Dell Wani]#service sshd start
 [root@Dell Wani]#scp try.txt Wani@localhost:~/
 Wani@localhost's password: 
 Hello
 [root@Dell Wani]#

Maintenant je me connecte en Wani, et tapez:

 [Wani@Dell ~]$ cat try.txt
 cat: try.txt: No such file or directory
 [Wani@Dell ~]$ 

Maintenant j'ai de nouveau log en root et taper la même commande avec l'option-v:

 [root@Dell Wani]# scp -v morph.log Wani@localhost:
 Executing: program /usr/bin/ssh host localhost, user Wani, command scp -v -t -- .
 OpenSSH_5.6p1, OpenSSL 1.0.0j-fips 10 May 2012
 debug1: Reading configuration data /etc/ssh/ssh_config
 debug1: Applying options for *
 debug1: Connecting to localhost [127.0.0.1] port 22.
 debug1: Connection established.
 debug1: permanently_set_uid: 0/0
 debug1: identity file /root/.ssh/id_rsa type -1
 debug1: identity file /root/.ssh/id_rsa-cert type -1
 debug1: identity file /root/.ssh/id_dsa type -1
 debug1: identity file /root/.ssh/id_dsa-cert type -1
 debug1: Remote protocol version 2.0, remote software version OpenSSH_5.6
 debug1: match: OpenSSH_5.6 pat OpenSSH*
 debug1: Enabling compatibility mode for protocol 2.0
 debug1: Local version string SSH-2.0-OpenSSH_5.6
 debug1: SSH2_MSG_KEXINIT sent
 debug1: SSH2_MSG_KEXINIT received
 debug1: kex: server->client aes128-ctr hmac-md5 none
 debug1: kex: client->server aes128-ctr hmac-md5 none
 debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
 debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
 debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
 debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
 debug1: Host 'localhost' is known and matches the RSA host key.
 debug1: Found key in /root/.ssh/known_hosts:2
 debug1: ssh_rsa_verify: signature correct
 debug1: SSH2_MSG_NEWKEYS sent
 debug1: expecting SSH2_MSG_NEWKEYS
 debug1: SSH2_MSG_NEWKEYS received
 debug1: Roaming not allowed by server
 debug1: SSH2_MSG_SERVICE_REQUEST sent
 debug1: SSH2_MSG_SERVICE_ACCEPT received
 debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-     with-mic,password
 debug1: Next authentication method: gssapi-keyex
 debug1: No valid Key exchange context
 debug1: Next authentication method: gssapi-with-mic
 debug1: Unspecified GSS failure.  Minor code may provide more information
 Credentials cache file '/tmp/krb5cc_0' not found

 debug1: Unspecified GSS failure.  Minor code may provide more information
 Credentials cache file '/tmp/krb5cc_0' not found

 debug1: Unspecified GSS failure.  Minor code may provide more information


 debug1: Unspecified GSS failure.  Minor code may provide more information


 debug1: Next authentication method: publickey
 debug1: Trying private key: /root/.ssh/id_rsa
 debug1: Trying private key: /root/.ssh/id_dsa
 debug1: Next authentication method: password
 Wani@localhost's password: 
 debug1: Authentication succeeded (password).
 Authenticated to localhost ([127.0.0.1]:22).
 debug1: channel 0: new [client-session]
 debug1: Requesting no-more-sessions@openssh.com
 debug1: Entering interactive session.
 debug1: Sending environment.
 debug1: Sending env XMODIFIERS = @im=none
 debug1: Sending env LANG = en_US.UTF-8
 debug1: Sending command: scp -v -t -- .
 Hello
 [root@Dell Wani]# debug1: client_input_channel_req: channel 0 rtype exit-status      reply      0
 debug1: channel 0: free: client-session, nchannels 1
 debug1: fd 0 clearing O_NONBLOCK
 debug1: fd 1 clearing O_NONBLOCK
 Transferred: sent 1664, received 1976 bytes, in 0.1 seconds
 Bytes per second: sent 22961.5, received 27266.8
 debug1: Exit status 0

(Et Après j'appuie sur Entrée)

 [root@Dell Wani]# 

Quelqu'un peut s'il vous plaît faire la lumière sur ce qui s'est passé ici? Pourquoi le fichier n'est pas d'avoir copié à Wani, de la racine?

84voto

nneonneo Points 56821

À l'aide de echo en .bashrc cassera scp, comme scp s'attend à voir son protocole de données sur l'entrée standard stdin/stdout canaux. Voir https://bugzilla.redhat.com/show_bug.cgi?id=20527 pour plus de discussion sur cette question.

Il y a quelques solutions disponibles:

  • Condition sur la "interactive" drapeau (par exemple, case $- in *i* comme suggéré par tripleee)
  • Utiliser l' tty utilitaire pour détecter un shell interactif (par exemple, if tty > /dev/null ou if [ -t 0 ])
  • Vérifier la valeur de $SSH_TTY

Je suppose que vous devez utiliser celui qui fonctionne pour vous. Je ne sais pas quelle est la meilleure (la plupart des portables les plus fiables) de l'option est, malheureusement.

20voto

Drew Ogle Points 91

Pour ajouter à nneonneo options, vous pouvez également état interactive drapeau avec

if [[ $- =~ "i" ]]

ce qui je pense est peut-être la façon la plus claire dans bash.

18voto

Manoj Ashok Points 21

cela fonctionne pour moi, Dans bashrc ajouter la première ligne,

if [ -z "$PS1" ]; then retour; fi

http://superuser.com/questions/690735/can-i-tell-if-im-in-an-scp-session-in-my-bashrc

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X