Shell Script для копирования файлов с одного сервера на другой

У меня есть 2 сервера Solaris. Я хочу написать сценарий оболочки, который будет копировать файл с одного сервера на другой.

scp /tmp/test/a.war tomcat@202.203.204.44:/tmp/

Приведенная выше команда при выполнении в PUTTY попросит меня ввести пароль для пункта назначения. Это нормально при использовании PUTTY.

Как я могу ввести пароль при запуске scp Команда через сценарий оболочки?

заранее спасибо

2 ответа

Решение

Вы должны настроить закрытый / открытый ключ SSH.

После создания поместите строку с открытым ключом в файл целевого сервера и пользователя ~/.ssh/authorized_keys.

Убедитесь, что для файла на исходном компьютере (для пользователя, который будет запускать команду scp / ssh) будет рекомендовано разрешение на доступ к файлу (400).

https://unix.stackexchange.com/questions/182483/scp-without-password-prompt-using-different-username или

http://docs.oracle.com/cd/E19253-01/816-4557/sshuser-33/index.html или похожая онлайн помощь может помочь вам.

      #!/bin/bash

# Check if the input file exists
input_file="input.txt"
if [ ! -f "$input_file" ]; then
echo "Error: Input file '$input_file' not found."
exit 1
fi

# Output file to log the copied files and errors
output_file="copied_files.log"

# Read input data line by line from the input file
while IFS= read -r line || [[ -n "$line" ]]; do
# Extract remote server IP and destination path from the current 
line
remote_server_ip=$(echo "$line" | awk '{print $1}')
destination_path=$(echo "$line" | awk '{print $2}')

# Display what is being read from the input file for 
troubleshooting
echo "Reading from input file:"
echo "REMOTE_SERVER_IP=$remote_server_ip"
echo "DESTINATION_PATH=$destination_path"
echo "-----------------------------"

# Check if remote server IP and destination path are provided
if [ -z "$remote_server_ip" ] || [ -z "$destination_path" ]; then
    echo "Error: Remote server IP or destination path not provided 
in the input file." >> "$output_file"
else
    # List of files to copy
    files_to_copy=("file1.txt" "file2.txt" "file3.txt")

    # Copy files to the remote server using scp and log the 
details/errors to the output file
    for file in "${files_to_copy[@]}"; do
        # Check if the file exists in the destination folder
        ssh "$remote_server_ip" "[ -e \"$destination_path/$file\" 
]"
        if [ $? -eq 0 ]; then
            echo "File: '$file', Server IP: '$remote_server_ip', 
Destination Path: '$destination_path' - Already Exists" >> 
"$output_file"
        else
            # Attempt to copy the file
            scp "$file" "$remote_server_ip":"$destination_path" 2>> 
"$output_file"
            if [ $? -eq 0 ]; then
                echo "File: '$file', Server IP: 
'$remote_server_ip', Destination Path: '$destination_path' - Copy 
Successful" >> "$output_file"
            else
                echo "File: '$file', Server IP: 
'$remote_server_ip', Destination Path: '$destination_path' - Copy 
Failed" >> "$output_file"
            fi
        fi
    done
fi
done < "$input_file"

echo "Copying process completed. Details/errors logged in 
'$output_file'."
Другие вопросы по тегам