Любой способ отправить файл с сервера A на сервер B&C с помощью scp с запросом файла/пароля

Любой способ отправить файл с сервера A на сервер B&C с помощью scp с запросом файла/пароля

Сценарий: Серверы: A, B и C (все Linux)

Файл:Файл.txt

Теперь мне нужно отправить файл с сервера A на B&C с помощью SCP, но мне придется ввести пароль и имя файла только один раз.

Нужно знать, как этого добиться.

Попробовал sshpass, но, похоже, он не установлен, и я не могу его установить :(

sshpass:command not found

Использованный код:(Здесь нужно вводить пароль каждый раз)

#!/bin/bash

echo "Enter Package Name:\c"

read package

package1="$package"

echo

scp ${package1} User@ServerB:/tmp/

scp ${package1} User@ServerC:/tmp/

решение1

Убрать запрос "пароля" можно так. На ПК с файлом (Сервер А) в терминале введите:

ssh-keygen -t rsa -b 2048
Enter file in which to save the key (/<user>/.ssh/id_rsa): [Hit Enter]
Enter passphrase (empty for no passphrase): [Hit Enter]
Enter same passphrase again: [Hit Enter]
Your identification has been saved in /<user>/.ssh/id_rsa.
Your public key has been saved in /<user>/.ssh/id_rsa.pub.

Затем вам нужно скопировать /<user>/.ssh/id_rsa.pubна сервер B и C. На сервере B и C выполните следующие действия. ПРИМЕЧАНИЕ: mkdir -p ~/.sshВозможно, это не понадобится.

mkdir -p ~/.ssh
cat id_rsa.pub >> ~/.ssh/authorized_keys
rm id_rsa.pub

Теперь вы можете подключаться с сервера A к B и C без пароля. Например, ваш скрипт теперь будет таким простым (с базовой проверкой файла):

#!/bin/sh

ask () {
    echo -n "Enter Package Name: "
    read package

    if [ ! -f "$package" ]
    then
        echo "
${package} is not a file. Try again.
"
        ask
    else 
        upload "$package"
    fi
}

upload () {
    echo "put \"$1\" \"/tmp/$1\" > sftp.cmd
    sftp User@serverB < sftp.cmd
    sftp User@serverC < sftp.cmd
    rm -f sftp.cmd  
}

ask
exit

Связанный контент