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

Damien Miller djm at mindrot.org
Thu Dec 7 14:41:14 EST 2000


On Wed, 6 Dec 2000, James wrote:

> 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


Do you have something in your profile or shell rc which causes text to 
be displayed on non-interactive logins? 

What does "ssh localhost true" say?

You mustn't have junk being printed for non-interactive sessions.

-d

>  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
> 
> 
> 

-- 
| ``We've all heard that a million monkeys banging on | Damien Miller -
| a million typewriters will eventually reproduce the | <djm at mindrot.org>
| works of Shakespeare. Now, thanks to the Internet, / 
| we know this is not true.'' - Robert Wilensky UCB / http://www.mindrot.org







More information about the openssh-unix-dev mailing list