파일/비밀번호 프롬프트와 함께 scp를 사용하여 A에서 B&C 서버로 파일을 보내는 모든 방법

파일/비밀번호 프롬프트와 함께 scp를 사용하여 A에서 B&C 서버로 파일을 보내는 모든 방법

시나리오: 서버: 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

관련 정보