Сценарий для тестирования SFTP входит в состояние?

Тот же вопрос задают и отвечают здесь:

https://stackoverflow.com/questions/8148715/how-to-set-limit-on-directory-size-in-linux

в основном сделайте виртуальную файловую систему путем заполнения файла нулями к размеру, Вы хотите, затем создаете файловую систему в том файле и затем loopmount он к каталогу, который Вы хотите ограничить.

Статья Linux Quartly об этом здесь: http://www.linuxquestions.org/questions/linux-server-73/directory-quota-601140/

Учебное руководство здесь: http://souptonuts.sourceforge.net/quota_tutorial.html

3
04.08.2014, 17:52
3 ответа

Большинство «клиентов протокола передачи файлов SSH (SFTP)» изначально созданы для интерактивного использования.

Это не означает, что в них отсутствуют параметры пакетного режима и т.п., но если вы ищете передачу файлов на основе сценариев по протоколу SSH, обратите внимание на scp или lftp вместо этого.

lftp (домашняя страница) - это то, что я использую во всех моих автоматических передачах файлов, и у него отличная обработка ошибок с надежным статусом выхода. Он был разработан с расчетом на надежность.

Для lftp существует множество параметров, и вы можете указать любые ssh параметры, которые вам нравятся, например -oStrictHostKeyChecking = yes , если вы укажете конкретный программа подключения для использования.

Пример:

MYSSHOPTIONS="-oStrichtHostKeyChecking=yes"
CONNPROG="ssh -a -x ${MYSSHOPTIONS}"

cat > ${cmdfile}  <<- EOF
set sftp:max-packets-in-flight 16
set sftp:connect-program ${CONNPROG}
open -u ${remoteuser},${password-unless-pubkey-setup} sftp://${remotehost}
put localfile -o remotepathname
EOF

lftp -f ${cmdfile} > ${sendlog} 2>&1
RC=$?
if test $RC -ne 0
then
   failed
else
   reliably OK
fi

Пример довольно длинный. Он создает командный файл, который устанавливает некоторые параметры, и загружает один файл localfile с возможным другим удаленным путем на другой стороне.


вариант sftp, если вы не хотите использовать lftp :

Если вы хотите проверить доступ к sftp для входа в систему, вы можете использовать этот шаблон в качестве отправной точки для дальнейших экспериментов:

#!/bin/sh -

mykey=/home/localuser/.ssh/id_rsa
remusr=bupuser
remhost=server.destination.domain.com
tmpfile=/tmp/sftptest.$$

cleanup() {
  rm -f ${tmpfile}
}
trap cleanup 0

sftp -i $mykey -oPubkeyAuthentication=yes -oPasswordAuthentication=no -oKbdInteractiveAuthentication=no -oStrichtHostKeyChecking=yes ${remusr}@${remhost}  ${tmpfile} 2>&1
  dir
  exit
EOF
ST=$?

if test $ST -ne 0
then
  echo SFTP LOGIN FAILURE. RC=${ST} 1>&2
  exit $ST
fi

cat ${tmpfile} # or do some clever grepping on it

exit $ST
1
27.01.2020, 21:23

Я написал скрипты ожиданий и бэша, чтобы это сработало. ... (хотя это может стать более причудливым, как упоминалось выше).

Бэш-скрипт: выполняется с тремя аргументами: user, pass и host. Например ./bwrap.sh ninja_user ninja_star1234 ninja.com

Скрипт создает лог-файл, который позже используется для проверки успешного входа/выхода.

#!/bin/bash

# log file
log="connection_test.log"
if [ -f $log ];
then
    echo "Older file $log exists, removing and creating new..."
    rm -rf $log
    touch $log
else
    echo "Creating log file"
    touch $log
fi

# running expect script.
# arg 1 is user, arg 2 is pass, arg 3 is host 
./one.exp $1 $2 $3  >> $log

# checking log for connections 
if grep --quiet logout $log; then
    echo "connection successful, proceeding to backup" >> $log
else
    echo "connection failed, please check server" >> $log
    exit 1
fi

Теперь, к ожидаемому скрипту, он имеет таймаут 10 секунд, и я на самом деле предпочитаю работать со строгим ключом хоста. Если вы хотите работать со строгим ключом хоста, отредактируйте соответствующую строку и добавьте ожидаемый "yes/no" .....

#!/usr/bin/expect -f

set user [lindex $argv 0];
set password [lindex $argv 1];
set host [lindex $argv 2];

set timeout 10
# now ssh
spawn ssh $user@$host -o StrictHostKeyChecking=no
match_max 100000 # Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"

expect "*$ "
send -- "whoami\r"
expect "<user name>"  # change user
send -- "exit\r"
expect eof

Надеюсь, это поможет.

Для соединения с sftp, пожалуйста: добавьте строку в скрипт bash, где $4 - это порт

./one.exp $1 $2 $3 $4 >> $log

, добавьте строку в скрипт expect:

set port [lindex $argv 3];

заменить в ожидаемом сценарии

spawn ssh $user@$host -o StrictHostKeyChecking=no

на

spawn sftp $host@$user -o Port=$port StrictHostKeyChecking=no

и

 expect "*$ "

на

expect "sftp>"

Так как у меня нет SFTP-сервера для его тестирования, изменения вносятся на основе [этого вопроса]: sftp файла с помощью shell скрипта

Также, [ожидать домашнюю страницу]: http://expect.sourceforge.net/ может быть удобно.

Наконец, читая ваш комментарий относительно прямого подхода, можно просто использовать nc и посмотреть, работает ли host:port. Для этого вы можете использовать:

#!/bin/bash

# log file
log="connection_test.log"
if [ -f $log ];
then
    echo "Older file $log exists, removing and creating new..."
    rm -rf $log
    touch $log
else
    echo "Creating log file"
    touch $log
fi

# nc
nc_command=`nc -z -w 5 $1 $2 | tee -a $log`
if [[ $nc_command == *succeeded* ]];
then
    echo "Server is listening, ready for backup" | tee -a $log
else
    echo " Server seems to be offline, please check" | tee -a $log
    exit 1
fi 

для запуска последнего скрипта: ./test.sh host:port

2
27.01.2020, 21:23

Можно проверить соединение sftp, просто выполнив тест соединения ssh:

if $(ssh -q belmin@mysever.bfworks.com exit)
then
    echo yes
fi

Если сервер не разрешает ssh, можно использовать nmap, но при этом не проверяется аутентификация ключа:

nmap myserver.bfworks.com -PN -p ssh | grep 'open'
0
27.01.2020, 21:23

Теги

Похожие вопросы