openssh-SNAP-20001207 scp "Bad file descriptor" sort-of work-around

James james at amethyst.nurealm.net
Thu Dec 7 10:33:41 EST 2000


Everything seems to work, though I still have trouble with scp.  The
behaviour is not protocol dependent - acts the same with either.  (Using
RedHat 6.2)

When I scp <file> <host>:<dir>, bash is invoked as a login shell on the
server side host - this doesn't seem right.  With my /etc/profile, I get

 Dec  6 15:06:20 amethyst sshd[3027]: error: select: Bad file descriptor

in the log (something doesn't like my script), and

 sourcing /etc/profile...
 Connection to <host> closed by remote host.

on the client side.  (My /etc/profile generates the "sourcing
/etc/profile..." message.)

If instead I mv /etc/profile /etc/profile.tmp, scp is successful.  strace
then gives, toward the end:

 open("/etc/passwd", O_RDONLY)           = 3
 fcntl(3, F_GETFD)                       = 0
 fcntl(3, F_SETFD, FD_CLOEXEC)           = 0
 fstat(3, {st_mode=S_IFREG|0644, st_size=2335, ...}) = 0
 old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
 0) = 0x40015000
 read(3, "root:x:0:0:root:/root:/bin/bash\n"..., 4096) = 2335
 close(3)                                = 0
 munmap(0x40015000, 4096)                = 0
 ioctl(2, TCGETS, 0xbffff734)            = -1 EINVAL (Invalid argument)
 rt_sigaction(SIGPIPE, {0x804b0bc, [], SA_RESTART|0x4000000}, {SIG_DFL}, 8)
 = 0
 pipe([3, 4])                            = 0
 pipe([5, 6])                            = 0
 pipe([7, 8])                            = 0
 close(3)                                = 0
 close(4)                                = 0
 fork()                                  = 21936
 close(5)                                = 0
 close(8)                                = 0
 read(7, bash: /etc/profile: No such file or directory
 bash: cma: command not found
 "\0", 1)                        = 1
 open("ssh-copy-id", O_RDONLY)           = 3
 fstat(3, {st_mode=S_IFREG|0644, st_size=1144, ...}) = 0
 write(6, "C0644 1144 ssh-copy-id\n", 23) = 23
 read(7, "\0", 1)                        = 1
 fstat(3, {st_mode=S_IFREG|0644, st_size=1144, ...}) = 0
 brk(0x8051000)                          = 0x8051000
 read(3, "#!/bin/sh\n\n# Shell script to ins"..., 1144) = 1144
 write(6, "#!/bin/sh\n\n# Shell script to ins"..., 1144) = 1144
 close(3)                                = 0
 write(6, "\0", 1)                       = 1
 read(7, "\0", 1)                        = 1
 _exit(0)

("cma" is a missing command from /etc/profile called from ~/.profile.
"ssh-copy-id" is the test file I'm trying to scp.)

When scp breaks, the very end looks like:

 read(7, ".", 1)                         = 1
 read(7, "\n", 1)                        = 1
 write(2, "sourcing /etc/profile...\n", 25sourcing /etc/profile...
 ) = 25
 _exit(1)                                = ?
 Connection to <host> closed by remote host.


So, is starting a bash login shell correct behavior for scp?

This login shell behaviour is a problem, as you can see.  An incompatibility
with /etc/profile or ~/.profile kills scp - uhg.

Might I have misconfigured something in ssh_config or sshd_config? or
compiling the package?  I have:

 OpenSSH configured has been configured with the following options.
                 User binaries: /usr/bin
                 User binaries: /usr/bin
               System binaries: /usr/sbin
           Configuration files: /etc/ssh
               Askpass program: /usr/libexec/ssh-askpass
                  Manual pages: /usr/man/manX
                      PID file: /var/run
      Random number collection: Device (/dev/urandom)
                Manpage format: man
                   PAM support: yes
            KerberosIV support: no
                   AFS support: no
                 S/KEY support: yes
          TCP Wrappers support: yes
          MD5 password support: no
   IP address in $DISPLAY hack: no
      Use IPv4 by default hack: no
       Translate v4 in v6 hack: yes

             Host: i686-pc-linux-gnu
         Compiler: gcc
   Compiler flags: -g -O2 -Wall -I. -I. -I/usr/include
     Linker flags:  -L/usr/lib -L/usr
        Libraries: -ldl -lnsl -lz  -lutil -lpam -lcrypto  -lskey -lwrap


Please Cc me on any response, as I'm not subscribed to the list.  Thanks.


James Feeney






More information about the openssh-unix-dev mailing list