ファイル/パスワードプロンプトでscpを使用してAからB&Cサーバーにファイルを送信する方法はありますか

ファイル/パスワードプロンプトでscpを使用してAからB&Cサーバーにファイルを送信する方法はありますか

シナリオ: サーバー: A、B、C (すべて Linux)

ファイル:File.txt

ここで、SCP を使用してサーバー A からサーバー B およびサーバー C にファイルを送信する必要がありますが、パスワードとファイル名を 1 回だけ入力する必要があります。

それを達成する方法を知る必要があります。

試してみました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

「パスワード」要求は次のように削除できます。ファイルがある PC (サーバー A) のターミナルで次のように入力します。

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.

次に、サーバー B と C にコピーする必要があります。/<user>/.ssh/id_rsa.pubサーバー 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

関連情報