sshd在每个ssh会话开始时打印环境变量

时间:2015-12-11 17:07:24

标签: variables ssh environment suse sshd

我有一台服务器在每次ssh登录后打印几个环境变量,我需要禁用该打印。 E.g。

server2:~ # ssh root@server1
This is the banner.  It resides in /etc/banner
Password:
Environment:
  USER=root
  LOGNAME=root
  HOME=/root
  PATH=/usr/bin:/bin:/usr/sbin:/sbin
  MAIL=/var/mail/root
  SHELL=/bin/bash
  SSH_CLIENT=192.168.0.3 57287 22
  SSH_CONNECTION=192.168.0.3 57287 192.168.0.1 22
  SSH_TTY=/dev/pts/3
  TERM=xterm
server1:~ #

横幅不会打印变量。我添加了一个横幅,看到它的输出在密码输入之前发生,而输入密码后打印变量。 sshd服务没有在调试模式下运行,我已经通过ps -aux |确认了grep sshd。

server1:~ # ps aux | grep sshd
root       647  0.0  0.0   3844   340 ?        Ss   16:33   0:00 monitord: sshd
root       648  0.0  0.0  53996  2568 ?        S    16:33   0:01 /usr/sbin/sshd -D
root       650  0.0  0.0   3844   336 ?        Ss   16:33   0:00 monitord: sshd_internal                                                    
root       651  0.0  0.0  53996  2544 ?        S    16:33   0:00 /usr/sbin/sshd -D -f /etc/ssh/sshd_config_internal

没有/root/.ssh/文件可以执行此操作:

server1:~ # ls -a /root/.ssh
.  ..  authorized_keys  id_rsa  id_rsa.pub  known_hosts

我还没有找到/ etc / ssh / sshd_config文件中的任何内容,我预计会对此产生影响。我能够禁用"上次登录"通过将PrintLastLog设置为no,紧接在变量之前出现的信息,我也将PrintMotd设置为no。我从服务器上尝试了另一个sshd二进制文件,它不打印变量,二进制文件也打印变量。所以我知道它不是sshd二进制本身,而是服务器上的一些配置。我还不知道还有什么可以打印这些变量。

如果它有帮助,当我从另一个节点直接从ssh运行命令时,命令的打印输出发生在变量之后。 E.g。

server2:~ # ssh server1 ls
This is a test.  I reside in /root/testBanner
Password:
Environment:
  USER=root
  LOGNAME=root
  HOME=/root
  PATH=/usr/bin:/bin:/usr/sbin:/sbin
  MAIL=/var/mail/root
  SHELL=/bin/bash
  SSH_CLIENT=192.168.0.3 57335 8022
  SSH_CONNECTION=192.168.0.3 57335 192.168.0.1 8022
file1
file2    <---- output of ssh command "ls" occurs after variables
file3
server2:~ #

我甚至尝试创建一个新用户,没有〜/ .bashrc~ / .profile等配置文件,当ssh作为该用户时,它也会显示变量。

另外,我正在运行SUSE 11

server1:~ # cat /etc/SuSE-release
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 1

SSHD的版本:

OpenSSH_5.1p1, OpenSSL 0.9.8j-fips 07 Jan 2009

这是init脚本

# cat /etc/init.d/sshd
#!/bin/bash
#
# /etc/init.d/lde-sshd: start/stop ssh daemon
#

### BEGIN INIT INFO
# Provides:       sshd
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Should-Start: lde
# Default-Start:  3
# Default-Stop:
# Description:    Secure shell deamon
### END INIT INFO

. /usr/lib/lde/lde.functions

check_node_type control payload detached standalone

lde_init_status_init lde-sshd

ADDITIONAL=$(
cd /etc/ssh/
shopt -s nullglob
for i in sshd_config_*; do
        echo ${i#sshd_config_};
done
)

case $1 in
        start)
                echo -n "Starting SSH daemon "
                if ! /usr/bin/monitord -n sshd -c "/usr/sbin/sshd -D"; then
                        panic "Failed to start SSH daemon"
                fi
                lde_init_status_start $?
                for i in $ADDITIONAL; do
                        echo -n "Starting $i SSH daemon "
                        if ! /usr/bin/monitord -n sshd_$i -c "/usr/sbin/sshd -D -f /etc/ssh/sshd_config_$i"; then
                                panic "Failed to start $i SSH daemon"
                        fi
                        lde_init_status_start $?
                done
                ;;
        stop)
                echo -n "Stopping SSH daemon "
                /usr/bin/monitord -n sshd -k
                lde_init_status_stop $?
                for i in $ADDITIONAL; do
                        echo -n "Stopping $i SSH daemon "
                        /usr/bin/monitord -n sshd_$i -k
                        lde_init_status_stop $?
                done
                ;;
        restart)
                $0 stop
                $0 start
                lde_init_status_silent $?
                ;;
        status)
                echo -n "Checking SSH daemon "
                lde_init_srv_status_check /usr/bin/monitord -n sshd -s
                for i in $ADDITIONAL; do
                        echo -n "Checking $i SSH daemon "
                        lde_init_srv_status_check /usr/bin/monitord -n sshd_$i -s
                done
                ;;
        *)
                echo "usage: $0 [start|stop|restart|status]"
                lde_init_error_unknown_option
                ;;
esac

lde_init_status_report

# End of file

如下所述,我发现问题在于apparmor使用相同的变量(debug_flag)并将sshd的debug_flag设置为1,因为它将自己的debug_flag设置为1.我不知道这两个如何程序可以使用相同的变量/地址空间,但我使用gdb逐步执行代码,并看到apparmor和sshd使用相同的地址作为他们的debug_flags。也许这个问题已在apparmor或sshd的更高版本中得到解决。

1 个答案:

答案 0 :(得分:0)

这意味着服务器正在调试模式下运行。查看init脚本或systemd单元或您的Suse使用的任何内容并删除-d选项。

服务应该从这些选项开始(来自Fedora):

/usr/sbin/sshd -D $OPTIONS

还要确保如何定义附加到命令行的$OPTIONS或其他环境变量。