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'."