#!/bin/sh # Copyright (c) 2015 Oracle and/or its affiliates. All Rights Reserved. # Copyright (c) International Business Machines Corp., 2005 # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2 of # the License, or (at your option) any later version. # # This program is distributed in the hope that it would be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write the Free Software Foundation, # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # Author: Mitsuru Chinen <mitch@jp.ibm.com> # TCID=ssh-stress TST_TOTAL=3 TST_CLEANUP="cleanup" . test_net.sh # Temporary directory to store sshd setting or ssh key # Note: ssh doesn't work when those directory is under /tmp. TMPDIR="/root" cleanup() { # Stop the ssh daemon test -s sshd.pid && kill $(cat sshd.pid) pkill 'netstress$' tst_rmdir [ "$rtmpdir" ] && tst_rhost_run -c "rm -rf $rtmpdir" TMPDIR= } setup() { trap "tst_brkm TBROK 'test interrupted'" INT tst_require_root tst_check_cmds pkill sshd ssh od ipver=${TST_IPV6:-"4"} # Get the sshd command with absolute path SSHD=$(which sshd) test "$SSHD" || tst_brkm TBROK "sshd daemon is not found" check_icmpv${ipver}_connectivity $(tst_iface) $(tst_ipaddr rhost) || \ tst_brkm TBROK "Failed to ping to $(tst_ipaddr rhost)" port=$(tst_rhost_run -c "tst_get_unused_port ipv${ipver} stream") tst_tmpdir tmpdir=$TST_TMPDIR cat << EOD > $tmpdir/sshd_config Port $port ListenAddress $(tst_ipaddr) PermitRootLogin yes AuthorizedKeysFile $tmpdir/authorized_keys PasswordAuthentication no AllowTcpForwarding yes TCPKeepAlive yes UseDNS no PidFile $tmpdir/sshd.pid EOD $SSHD -f $tmpdir/sshd_config || \ tst_brkm TBROK "Failed to run sshd daemon" tst_resm TINFO "Generate configuration file and key at the remote host" rtmpdir=$(tst_rhost_run -c "mktemp -d -p $TMPDIR") tst_rhost_run -s -c "ssh-keygen -t rsa -N \"\" -f $rtmpdir/id_rsa > /dev/null" rconfig=$rtmpdir/ssh_config tst_rhost_run -s -c "printf \"\ Port $port\n\ StrictHostKeyChecking no\n\ PasswordAuthentication no\n\ UserKnownHostsFile $rtmpdir/known_hosts\n\ IdentityFile $rtmpdir/id_rsa\n\" > $rconfig" tst_rhost_run -s -c "chmod 700 $rtmpdir; chmod 600 $rtmpdir/*" tst_resm TINFO "Generate authorized_keys" tst_rhost_run -c "cat ${rtmpdir}/id_rsa.pub" > $tmpdir/authorized_keys tst_resm TINFO "restore context of authorized_keys" local rc=$(which restorecon) test "$rc" && $rc $tmpdir/authorized_keys chmod 700 $tmpdir chmod 600 $tmpdir/* } test01() { tst_resm TINFO "Creating '$CONNECTION_TOTAL' ssh sessions" tst_rhost_run -s -c "ssh-stress01-rmt $ipver $(tst_ipaddr) \ $rconfig $CONNECTION_TOTAL" tst_resm TPASS "Test is finished successfully" } test02() { tst_resm TINFO "Log in/out by many clients asynchronously" tst_resm TINFO "'$CONNECTION_TOTAL' clients, time $NS_DURATION sec" tst_rhost_run -s -c "ssh-stress02-rmt $ipver $(tst_ipaddr) \ $rconfig $CONNECTION_TOTAL $NS_DURATION" tst_resm TPASS "Test is finished successfully" } test03() { tst_resm TINFO "Forwarding TCP traffic with $NS_TIMES requests" # Run a TCP traffic server port=$(tst_get_unused_port ipv${ipver} stream) netstress -R 3 -g $port > tcp_server.log 2>&1 & tst_rhost_run -s -c "ssh-stress03-rmt $ipver $(tst_ipaddr) \ $rconfig $port $NS_TIMES" tst_resm TPASS "Test is finished successfully" } setup test01 test02 test03 tst_exit