我有一台服务器在每次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的更高版本中得到解决。
答案 0 :(得分:0)
这意味着服务器正在调试模式下运行。查看init脚本或systemd单元或您的Suse使用的任何内容并删除-d
选项。
服务应该从这些选项开始(来自Fedora):
/usr/sbin/sshd -D $OPTIONS
还要确保如何定义附加到命令行的$OPTIONS
或其他环境变量。