📄 test-exec.sh
字号:
# $OpenBSD: test-exec.sh,v 1.27 2005/02/27 11:33:30 dtucker Exp $# Placed in the Public Domain.#SUDO=sudo# Unbreak GNU head(1)_POSIX2_VERSION=199209export _POSIX2_VERSIONcase `uname -s 2>/dev/null` inOSF1*) BIN_SH=xpg4 export BIN_SH ;;esacif [ ! -z "$TEST_SSH_PORT" ]; then PORT="$TEST_SSH_PORT"else PORT=4242fiif [ -x /usr/ucb/whoami ]; then USER=`/usr/ucb/whoami`elif whoami >/dev/null 2>&1; then USER=`whoami`else USER=`id -un`fiOBJ=$1if [ "x$OBJ" = "x" ]; then echo '$OBJ not defined' exit 2fiif [ ! -d $OBJ ]; then echo "not a directory: $OBJ" exit 2fiSCRIPT=$2if [ "x$SCRIPT" = "x" ]; then echo '$SCRIPT not defined' exit 2fiif [ ! -f $SCRIPT ]; then echo "not a file: $SCRIPT" exit 2fiif $TEST_SHELL -n $SCRIPT; then trueelse echo "syntax error in $SCRIPT" exit 2fiunset SSH_AUTH_SOCKSRC=`dirname ${SCRIPT}`# defaultsSSH=sshSSHD=sshdSSHAGENT=ssh-agentSSHADD=ssh-addSSHKEYGEN=ssh-keygenSSHKEYSCAN=ssh-keyscanSFTP=sftpSFTPSERVER=/usr/libexec/openssh/sftp-serverSCP=scpif [ "x$TEST_SSH_SSH" != "x" ]; then SSH="${TEST_SSH_SSH}"fiif [ "x$TEST_SSH_SSHD" != "x" ]; then SSHD="${TEST_SSH_SSHD}"fiif [ "x$TEST_SSH_SSHAGENT" != "x" ]; then SSHAGENT="${TEST_SSH_SSHAGENT}"fiif [ "x$TEST_SSH_SSHADD" != "x" ]; then SSHADD="${TEST_SSH_SSHADD}"fiif [ "x$TEST_SSH_SSHKEYGEN" != "x" ]; then SSHKEYGEN="${TEST_SSH_SSHKEYGEN}"fiif [ "x$TEST_SSH_SSHKEYSCAN" != "x" ]; then SSHKEYSCAN="${TEST_SSH_SSHKEYSCAN}"fiif [ "x$TEST_SSH_SFTP" != "x" ]; then SFTP="${TEST_SSH_SFTP}"fiif [ "x$TEST_SSH_SFTPSERVER" != "x" ]; then SFTPSERVER="${TEST_SSH_SFTPSERVER}"fiif [ "x$TEST_SSH_SCP" != "x" ]; then SCP="${TEST_SSH_SCP}"fi# Path to sshd must be absolute for rexecif [ ! -x /$SSHD ]; then SSHD=`which sshd`fiif [ "x$TEST_SSH_LOGFILE" = "x" ]; then TEST_SSH_LOGFILE=/dev/nullfi# these should be used in testsexport SSH SSHD SSHAGENT SSHADD SSHKEYGEN SSHKEYSCAN SFTP SFTPSERVER SCP#echo $SSH $SSHD $SSHAGENT $SSHADD $SSHKEYGEN $SSHKEYSCAN $SFTP $SFTPSERVER $SCP# helperechon(){ if [ "x`echo -n`" = "x" ]; then echo -n "$@" elif [ "x`echo '\c'`" = "x" ]; then echo "$@\c" else fatal "Don't know how to echo without newline." fi}have_prog(){ saved_IFS="$IFS" IFS=":" for i in $PATH do if [ -x $i/$1 ]; then IFS="$saved_IFS" return 0 fi done IFS="$saved_IFS" return 1}cleanup (){ if [ -f $PIDFILE ]; then pid=`cat $PIDFILE` if [ "X$pid" = "X" ]; then echo no sshd running else if [ $pid -lt 2 ]; then echo bad pid for ssd: $pid else $SUDO kill $pid fi fi fi}trace (){ echo "trace: $@" >>$TEST_SSH_LOGFILE if [ "X$TEST_SSH_TRACE" = "Xyes" ]; then echo "$@" fi}verbose (){ echo "verbose: $@" >>$TEST_SSH_LOGFILE if [ "X$TEST_SSH_QUIET" != "Xyes" ]; then echo "$@" fi}fail (){ echo "FAIL: $@" >>$TEST_SSH_LOGFILE RESULT=1 echo "$@"}fatal (){ echo "FATAL: $@" >>$TEST_SSH_LOGFILE echon "FATAL: " fail "$@" cleanup exit $RESULT}RESULT=0PIDFILE=$OBJ/pidfiletrap fatal 3 2# create server configcat << EOF > $OBJ/sshd_config StrictModes no Port $PORT ListenAddress 127.0.0.1 #ListenAddress ::1 PidFile $PIDFILE AuthorizedKeysFile $OBJ/authorized_keys_%u LogLevel DEBUG AcceptEnv _XXX_TEST_* AcceptEnv _XXX_TEST Subsystem sftp $SFTPSERVEREOFif [ ! -z "$TEST_SSH_SSHD_CONFOPTS" ]; then trace "adding sshd_config option $TEST_SSH_SSHD_CONFOPTS" echo "$TEST_SSH_SSHD_CONFOPTS" >> $OBJ/sshd_configfi# server config for proxy connectscp $OBJ/sshd_config $OBJ/sshd_proxy# allow group-writable directories in proxy-modeecho 'StrictModes no' >> $OBJ/sshd_proxy# create client configcat << EOF > $OBJ/ssh_configHost * Hostname 127.0.0.1 HostKeyAlias localhost-with-alias Port $PORT User $USER GlobalKnownHostsFile $OBJ/known_hosts UserKnownHostsFile $OBJ/known_hosts RSAAuthentication yes PubkeyAuthentication yes ChallengeResponseAuthentication no HostbasedAuthentication no PasswordAuthentication no BatchMode yes StrictHostKeyChecking yesEOFif [ ! -z "$TEST_SSH_SSH_CONFOPTS" ]; then trace "adding ssh_config option $TEST_SSH_SSHD_CONFOPTS" echo "$TEST_SSH_SSH_CONFOPTS" >> $OBJ/ssh_configfirm -f $OBJ/known_hosts $OBJ/authorized_keys_$USERtrace "generate keys"for t in rsa rsa1; do # generate user key rm -f $OBJ/$t ${SSHKEYGEN} -q -N '' -t $t -f $OBJ/$t ||\ fail "ssh-keygen for $t failed" # known hosts file for client ( echon 'localhost-with-alias,127.0.0.1,::1 ' cat $OBJ/$t.pub ) >> $OBJ/known_hosts # setup authorized keys cat $OBJ/$t.pub >> $OBJ/authorized_keys_$USER echo IdentityFile $OBJ/$t >> $OBJ/ssh_config # use key as host key, too $SUDO cp $OBJ/$t $OBJ/host.$t echo HostKey $OBJ/host.$t >> $OBJ/sshd_config # don't use SUDO for proxy connect echo HostKey $OBJ/$t >> $OBJ/sshd_proxydonechmod 644 $OBJ/authorized_keys_$USER# create a proxy version of the client config( cat $OBJ/ssh_config echo proxycommand ${SUDO} sh ${SRC}/sshd-log-wrapper.sh ${SSHD} ${TEST_SSH_LOGFILE} -i -f $OBJ/sshd_proxy) > $OBJ/ssh_proxy# check proxy config${SSHD} -t -f $OBJ/sshd_proxy || fatal "sshd_proxy broken"start_sshd (){ # start sshd $SUDO ${SSHD} -f $OBJ/sshd_config -t || fatal "sshd_config broken" $SUDO ${SSHD} -f $OBJ/sshd_config -e >>$TEST_SSH_LOGFILE 2>&1 trace "wait for sshd" i=0; while [ ! -f $PIDFILE -a $i -lt 10 ]; do i=`expr $i + 1` sleep $i done test -f $PIDFILE || fatal "no sshd running on port $PORT"}# source test body. $SCRIPT# kill sshdcleanupif [ $RESULT -eq 0 ]; then verbose ok $tidelse echo failed $tidfiexit $RESULT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -