В сценарии Bash требуется подтверждение FTP-соединения

Я использую приведенный ниже код для подключения к ftp-узлу. Я просто хочу знать, как мне проверить, не могу ли я подключиться к ftp-серверу или ftp-сервер не отвечает. В любом случае это предупредит меня, что ftp-сервер в порядке или не работает. На самом деле я хочу встроить обычный код bash для проверки подключения.

#!/bin/ksh  
ftp -nv <<EOF  
open xxx.xx.xx.xx  
user xxx xxxxxxxxx  
bye  
EOF  

person Dogar    schedule 03.05.2012    source источник


Ответы (3)


Как насчет поиска вывода с ftp? Я не уверен, что возвращает ваша версия ftp после успешной загрузки, но что-то вроде:

#!/bin/ksh

(
ftp -nv <<EOF
open xxx.xx.xx.xx
user xxx xxxxxxxxx
bye
EOF
) | grep -i "success"
if [[ "$?" -eq "0" ]]
then
        echo "FTP SUCCESS"
else
        echo "FTP FAIL"
fi

Должно сработать..

person Benj    schedule 03.05.2012
comment
выдает следующую ошибку ./noini.sh[3]: синтаксическая ошибка в строке 3: `‹‹' не соответствует - person Dogar; 04.05.2012
comment
Хм, может быть разница между bash и ksh (которого у меня нет), простые скрипты обычно совместимы, но, возможно, не в этом случае. - person Benj; 04.05.2012
comment
Ваш код работает в моей среде. @Dogar: убедитесь, что после обеих копий EOF нет скрытых символов (пробел, табуляция, ??). Всем удачи. - person shellter; 04.05.2012

У меня была такая же проблема раньше, я решил ее, проверив вывод команды ftp. Тем не менее, это показалось мне довольно странным, поэтому я решил использовать для этого PERL.

#!/usr/bin/perl
use strict;
use warnings;
use Net::FTP;

# open connection
my $ftp = Net::FTP->new("127.0.0.1");
if (! $ftp) {
    print "connection failed!";
    exit 1;
}

# in case you would need to test login too
# if (! $ftp->login("username", "password")) {
#    print "login failed!";
#    exit 2;
#}

$ftp->close();
exit 0;
person Frantisek Durajka    schedule 10.05.2012

Используйте эту команду, чтобы проверить, доступен ли ftp-сервер:

sleep 1 | telnet ftp.example.com 21 2> /dev/null | grep -c 'FTP'

Что оно делает:

  • Устанавливает соединение с ftp.example.com через порт 21 (используйте порт 22 для sftp)
  • Ждет одну секунду, а затем разрывает соединение
  • Игнорирует ответ «Соединение закрыто удаленным хостом» от telnet с «2> /dev/null»
  • Возвращает «1», если ответ адресованного сервера содержит «FTP», и «0», если нет.

Возможно, вам придется настроить шаблон grep «FTP», если ожидаемый приветственный ответ от ftp-сервера, который вы хотите проверить, отличается от стандартного ответа, который обычно выглядит примерно так:

   Trying 93.184.216.34...
   Connected to ftp.example.com.
   Escape character is '^]'.
   220 FTP Service
person Timor Kodal    schedule 05.11.2019