原来是通过这样的方式避开这个问题。 明白了!现在没问题了! 谢谢dongsheng兄帮忙!非常感谢!
2010/7/6 Dongsheng Song <[email protected]> > 加上这个后,sftp 在执行 startx 之前就会退出。 > > > 2010/7/6 higeon <[email protected]> > >> 感谢dongsheng兄! >> 我在.bashrc最前面加上了 >> [ -z "$PS1" ] && return >> sftp就可以登录了! >> >> 但是还是想知道这问题和我加上的那个自动startx有什么关系。 >> 为什么注释掉那一段就可以登录呢? >> >> >> 2010/7/6 Dongsheng Song <[email protected]> >> >> 从日志看,是客户端不理解服务器的输出,才主动关闭的: >>> >>> >>> Jul 6 10:00:50 atom sshd[4045]: Received disconnect from 192.168.0.231: >>> 11: disconnected by user >>> >>> 你有没有试试我这个方法呢? >>> >>> >>> > 那么可以在 /root/.bashrc 开始增加: >>> > # If not running interactively, don't do anything >>> > [ -z "$PS1" ] && return >>> >>> >>> 2010/7/6 higeon <[email protected]> >>> >>> >>>> 应该跟sftp的版本没有关系。 >>>> 不管我用windows下的winscp还是用linux下的sftp,root都没法连上去。 >>>> 输入密码之后就得到Connection closed的信息。 >>>> 我觉得一定是和.bashrc中的自动startx那段有关系。注释掉之后就可以sftp登录。 >>>> 难道sftp用的是/dev/tty1? >>>> >>>> >> 在/root/.bashrc中添加了 >>>> >>>> >> # Auto start X >>>> >> if [ -z "$DISPLAY" ] && [ $(tty) = /dev/tty1 ]; then >>>> >> while true >>>> >> do >>>> >> startx >>>> >> done >>>> >> fi >>>> >>>> 下面是DEBUG模式下的auth.log输出。 >>>> >>>> Jul 6 10:00:43 atom sshd[4029]: debug1: Forked child 4045. >>>> Jul 6 10:00:43 atom sshd[4045]: debug1: rexec start in 5 out 5 newsock >>>> 5 pipe 7 sock 8 >>>> Jul 6 10:00:43 atom sshd[4045]: debug1: inetd sockets after dupping: 3, >>>> 3 >>>> Jul 6 10:00:43 atom sshd[4045]: Connection from 192.168.0.231 port >>>> 46875 >>>> Jul 6 10:00:43 atom sshd[4045]: debug1: Client protocol version 2.0; >>>> client software version OpenSSH_5.3p1 Debian-3ubuntu4 >>>> Jul 6 10:00:43 atom sshd[4045]: debug1: match: OpenSSH_5.3p1 >>>> Debian-3ubuntu4 pat OpenSSH* >>>> Jul 6 10:00:43 atom sshd[4045]: debug1: Enabling compatibility mode for >>>> protocol 2.0 >>>> Jul 6 10:00:43 atom sshd[4045]: debug1: Local version string >>>> SSH-2.0-OpenSSH_5.1p1 Debian-5 >>>> Jul 6 10:00:48 atom sshd[4045]: debug1: PAM: initializing for "root" >>>> Jul 6 10:00:48 atom sshd[4045]: debug1: PAM: setting PAM_RHOST to >>>> "192.168.0.231" >>>> Jul 6 10:00:48 atom sshd[4045]: debug1: PAM: setting PAM_TTY to "ssh" >>>> Jul 6 10:00:48 atom sshd[4045]: Failed none for root from 192.168.0.231 >>>> port 46875 ssh2 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: PAM: password authentication >>>> accepted for root >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: do_pam_account: called >>>> Jul 6 10:00:50 atom sshd[4045]: Accepted password for root from >>>> 192.168.0.231 port 46875 ssh2 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: monitor_child_preauth: root has >>>> been authenticated by privileged process >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: PAM: establishing credentials >>>> Jul 6 10:00:50 atom sshd[4045]: pam_unix(sshd:session): session opened >>>> for user root by (uid=0) >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: Entering interactive session >>>> for SSH2. >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: server_init_dispatch_20 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: server_input_channel_open: >>>> ctype session rchan 0 win 2097152 max 32768 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: input_session_request >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: channel 0: new [server-session] >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_new: session 0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_open: channel 0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_open: session 0: link >>>> with channel 0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: server_input_channel_open: >>>> confirm session >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: server_input_global_request: >>>> rtype [email protected] want_reply 0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: server_input_channel_req: >>>> channel 0 request env reply 0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_by_channel: session 0 >>>> channel 0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_input_channel_req: >>>> session 0 req env >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: server_input_channel_req: >>>> channel 0 request subsystem reply 1 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_by_channel: session 0 >>>> channel 0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_input_channel_req: >>>> session 0 req subsystem >>>> Jul 6 10:00:50 atom sshd[4045]: subsystem request for sftp >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: subsystem: exec() >>>> /usr/lib/openssh/sftp-server >>>> Jul 6 10:00:50 atom sshd[4047]: debug1: SELinux support disabled >>>> Jul 6 10:00:50 atom sshd[4047]: debug1: PAM: reinitializing credentials >>>> Jul 6 10:00:50 atom sshd[4047]: debug1: permanently_set_uid: 0/0 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: Received SIGCHLD. >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_by_pid: pid 4047 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_exit_message: session 0 >>>> channel 0 pid 4047 >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: session_exit_message: release >>>> channel 0 >>>> Jul 6 10:00:50 atom sshd[4045]: Received disconnect from 192.168.0.231: >>>> 11: disconnected by user >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: do_cleanup >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: PAM: cleanup >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: PAM: deleting credentials >>>> Jul 6 10:00:50 atom sshd[4045]: debug1: PAM: closing session >>>> Jul 6 10:00:50 atom sshd[4045]: pam_unix(sshd:session): session closed >>>> for user root >>>> >>>> >>>> >>>> 2010/7/5 Dongsheng Song <[email protected]> >>>> >>>>> 改 LogLevel 为 VERBOSE 之后,也没有看到 sftp 的错误,看来需要改为 DEBUG。 >>>>> >>>>> 根据这里的信息,似乎是你的 sftp 客户端比较旧,不能理解非交互输出的内容。 >>>>> http://www.openssh.org/faq.html#2.9 >>>>> >>>>> 那么可以在 /root/.bashrc 开始增加: >>>>> >>>>> # If not running interactively, don't do anything >>>>> [ -z "$PS1" ] && return >>>>> >>>>> >>>>> >>>>> 2010/7/5 higeon <[email protected]> >>>>> >>>>>> 改LogLevel为VERBOSE 之后 >>>>>> 看到如下的log输出 >>>>>> >>>>>> Jul 5 17:57:09 atom sshd[3789]: Connection from 192.168.0.105 port >>>>>> 49681 >>>>>> Jul 5 17:57:09 atom sshd[3789]: Address 192.168.0.105 maps to >>>>>> atom.local, but this does not map back to the address - POSSIBLE >>>>>> BREAK-IN ATTEMPT! >>>>>> Jul 5 17:57:09 atom sshd[3789]: Failed none for root from >>>>>> 192.168.0.105 port 49681 ssh2 >>>>>> Jul 5 17:57:30 atom sshd[3789]: Accepted password for root from >>>>>> 192.168.0.105 port 49681 ssh2 >>>>>> Jul 5 17:57:30 atom sshd[3789]: pam_unix(sshd:session): session >>>>>> opened for user root by (uid=0) >>>>>> Jul 5 17:57:30 atom sshd[3789]: subsystem request for sftp >>>>>> Jul 5 17:57:30 atom sshd[3789]: Connection closed by 192.168.0.105 >>>>>> Jul 5 17:57:30 atom sshd[3789]: pam_unix(sshd:session): session >>>>>> closed for user root >>>>>> Jul 5 17:57:30 atom sshd[3789]: Transferred: sent 1960, received 1424 >>>>>> bytes >>>>>> Jul 5 17:57:30 atom sshd[3789]: Closing connection to 192.168.0.105 >>>>>> port 49681 >>>>>> >>>>>> >>>>>> 问题在哪? >>>>>> >>>>>> >>>>>> 2010/7/5 Dongsheng Song <[email protected]>: >>>>>> > 我用普通用户没有问题。 >>>>>> > 你修改 sshd 的日志级别,再登录 sftp,看看 sshd 的日志报告什么问题? >>>>>> > >>>>>> > Syslog Facility AUTH >>>>>> > LogLevel VERBOSE 或 DEBUG >>>>>> > >>>>>> > tail -f /var/log/auth.log >>>>>> > >>>>>> > 2010/7/5 higeon <[email protected]> >>>>>> >> >>>>>> >> 在debian 5.04 lenny下我按照下面的方法设定了root的自动登录和自动startx。 >>>>>> >> 后 来发现用root用户sftp登录登不进去。但是ssh却没问题。 >>>>>> >> 我发现只要去掉root用户的.bashrc中的自动startx设定,sftp就可以正常登录。 >>>>>> >> >>>>>> >> root自动登录和自动startx的设定如下: >>>>>> >> >>>>>> >> 修改/etc/inittab >>>>>> >> 把 >>>>>> >> 1:2345:respawn:/sbin/getty 38400 tty1 >>>>>> >> 修改为 >>>>>> >> 1:2345:respawn:/sbin/rungetty tty1 --autologin root >>>>>> >> >>>>>> >> 在/root/.bashrc中添加 >>>>>> >> # Auto start X >>>>>> >> if [ -z "$DISPLAY" ] && [ $(tty) = /dev/tty1 ]; then >>>>>> >> while true >>>>>> >> do >>>>>> >> startx >>>>>> >> done >>>>>> >> fi >>>>>> >> >>>>>> >> ※以上设定我参考了 >>>>>> >> http://forums.debian.net/viewtopic.php?t=29333 >>>>>> >> >>>>>> >> ※PermitRootLogin 设定为 yes,没有改过。 >>>>>> >> >>>>>> >> 谁能帮忙解决这个问题? >>>>>> >> >>>>>> >> 谢谢! >>>>>> > >>>>>> > >>>>>> >>>>> >>>>> >>>> >>> >> >

