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