
シナリオ:サーバー:A、B、C(すべてLinux)
ファイル:file.txt
SCPを使用してサーバーAからB&Cにファイルを送信する必要があります。パスワードとファイル名は一度だけ入力できます。
実装方法を知る必要があります。
試しましたが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.
/<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