scp 与 /bin/sh 默认 shell 兼容,但与 /bin/bash 默认 shell 断开连接

scp 与 /bin/sh 默认 shell 兼容,但与 /bin/bash 默认 shell 断开连接

我最近设置了一个相当小的 Debian 服务器(fail2ban并且ufw安装了启用的 OpenSSH 配置文件),使用具有默认 shell 的用户/bin/bash

$ grep "$(whoami)" /etc/passwd
nightfirecat:x:1000:1000::/home/nightfirecat:/bin/bash

当我scp file server.ip从我的机器运行时,我得到以下输出:

$ scp file server.ip
lost connection

但是,当我将服务器上的默认 shell 更改为/bin/shviasudo usermod --shell /bin/sh nightfirecat或 时sudo chsh -s /bin/sh nightfirecatscp命令会成功。

$ scp file server.ip
file                                               100%   16KB 314.8KB/s   00:00

运行 ssh 命令时会观察到相同的行为:(使用 ssh 进行远程连接,无论使用哪种 shell 都可以)

$ ssh server.ip 'echo foo' # /bin/bash shell

$ ssh server.ip 'echo foo' # /bin/sh shell
foo

我的/var/log/auth.log日志似乎没有显示任何身份验证问题,而 scp 的调试日志也没有说明问题。我确实有一个.bashrc在登录时运行的文件,但它的第一个命令是[ -z "$PS1" ] && exit在非交互式登录时退出。

答案1

事实上问题出在我的.bashrc文件上。该文件的开头之前是这样写的:

# If not running interactively, don't do anything
[ -z "$PS1" ] && exit

问题在于exit退出 shell。改用return以下方法可达到预期效果:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

PS 致谢https://superuser.com/a/1184787/460089该解决方案。

相关内容