В AIX у меня есть скрипт, который SSH к удаленному серверу

 #!/bin/sh     

 Usage () {     
    echo "Usage: $0 <config_file>"     
 echo "Example:   ./transfer_dmz_startD.sh /export/data/mbsesb/config/transfer_dmz.cfg"     
    exit     
 }          

if [ $# -lt 1 ]    
then    
    usage    
fi    

config_file=${1}    
NAME=`basename $0 .sh`    
LOG=${NAME}.log    
Today=`date '+%Y%m%d'`    
TARFILE=${NAME}.${Today}    
ZIPFILE=${TARFILE}.gz    
DMZ_USER=aaa    
DMZ_HOST=bbbb
TIMESTAMP=`date +%H:%M:%S`    

LOCL_WORKING_DIR=`grep "^local" $config_file | cut -d'=' -f2`    
LOGDIR=`grep "^log" $config_file | cut -d'=' -f2`    
DESTSERVNAME=`grep "^destserver" $config_file | cut -d'=' -f2`    
DAILY_DEST_DIR=`grep "^daily" $config_file | cut -d'=' -f2`    
WEEKLY_DEST_DIR=`grep "^weekly" $config_file | cut -d'=' -f2`    
MONTH_DEST_DIR=`grep "^monthly" $config_file | cut -d'=' -f2`    
LOCLSERVNAME=`grep "^loclserver" $config_file | cut -d'=' -f2`    
LOCL_FILES_DIR=`grep "^mbsesb" $config_file | cut -d'=' -f2`    
LOGF=${LOGDIR}.${LOG}    

mkdir -p ${LOCL_FILES_DIR}/cool_${Today}    

if [ $? != 0 ]    
then    
    echo "Cannot create ${LOCL_FILES_DIR}/cool_${Today}" >>$LOGF   
    echo "Check each directory permission and rerun the program">>$LOGF    
    echo "$NAME terminated abnormaly">>$LOGF    
     mailx -r user@example.com -s "!!!Please read  a $LOGF and make     appropriate action"    
    exit 1    
fi    



ssh ${DMZ_USER}@{$DMZ_HOST}    

if [ $? != 0 ]    
then    
    echo "Cannot connect to $DMZ_USER server, please check connection and re-run the script again">>$LOGF    
    echo "$NAME terminated abnormaly">>$LOGF    
     echo "$NAME.sh cannot connect to ${DMZ_USER}@{$DMZ_HOST}" | mailx  -r user2@example.com -s "!!!Please read  a $LOGF and make appropriate action"    
    exit 1    
fi    

datetime=`date +%p`    

if [ ${datetime} -eq "AM" ]    
than    
    ext=Daily    
else    
    ext=EOD    
fi    
cd  $DAILY_DEST_DIR    

tar -cvf $TARFILE.$ext.tar *$Today*.*    

if [ $? != 0 ]    
then    
    echo "$NAME.sh cannot create tar file on $DMZ_USER server" >>$LOGF    
    echo "email is sending to developer" >>$LOGF    
     mailx -r user@example.com -s "!!!Cannot tar the files on     hbrgmfidmzb1. Please check the files on daily directory"    
fi    

gzip  $TARFILE.$ext.tar    

if [ $? != 0 ]    
then
    echo "$NAME.sh cannot create zip file"    
    echo "email is sending to developer"    
     mailx -r user@example.com -s "!!!Cannot tar the files on hbrgmfidmzb1. Please check the files on daily directory"    
fi    

После этой команды ошибка говорит:

ssh: не удалось разрешить имя хоста {Apsswd}: имя хоста и имя службы не предоставлены или не найдены
Флаги, которые вы дали, не имеют смысла, так как вы не отправляете почту.
SSH_KEY настроены, я могу подключиться к этому серверу вручную, но скрипт не работает.
Любой совет?

1 ответ1

0

Это неверный вызов команды ssh . Правильный один

ssh user@host

Проверьте руководство man ssh .

PS ssh не позволяет передавать пароль в качестве параметра. Вам нужно использовать либо какой-нибудь ssh-агент, запрашивающий один раз пароль, который вам нужно ввести вручную, и после этого он автоматически предоставит пароль ssh либо вы можете использовать другого стороннего помощника, такого как sshpass -p 'Password' ssh user@host ( Не уверен, существует ли он в AIX)

Другой способ избавиться от пароля - использовать аутентификацию с открытым ключом, таким образом вы предоставляете закрытый ключ (который был создан без пароля) для ssh как

ssh -i /path/to/private/key user@host

В csh переменные должны быть назначены как

set HOST = "RealRemoteHostName"
set USER = "SomeUser"

затем используйте его в своем скрипте как

ssh $USER@$HOST

PS

После обновления вопроса выясняется, что это не C Shell (csh), а /bin/sh и проблемные места там

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .