스크립트에서 비밀번호 없이 SSH를 통해 scp 명령을 실행할 수 있습니다.

스크립트에서 비밀번호 없이 SSH를 통해 scp 명령을 실행할 수 있습니다.

내 문제는 다음과 같습니다. 비밀번호를 입력하지 않고 ssh를 통해 원격 서버로 scp 명령을 실행하고 싶습니다. 내 단계를 설명하겠습니다. 나의 첫 번째 단계는 다음과 같습니다.

ssh-keygen -t rsa그리고

local@host$ ssh-copy-id -i /root/.ssh/id_rsa.pub remote@host로컬 머신에서

그런 다음 원격 컴퓨터에서도 동일한 작업을 수행했습니다.

ssh-keygen -t rsa그리고

remote@host$ ssh-copy-id -i /root/.ssh/id_rsa.pub local@host

위의 설명 후에는 비밀번호를 입력하지 않고도 두 시스템 모두에서 ssh를 실행할 수 있습니다. 원격 시스템에서 scp 명령을 실행할 수 scp /home/remote/info.txt.gz local@host:/root/있으며 모든 것이 잘 작동합니다.

그런 다음 아래에 설명된 몇 가지 작업을 사용하여 스크립트를 작성해 보았습니다. 스크립트의 마지막 단계는 scp명령이지만 예상대로 작동하지 않았습니다.

#!/bin/bash
remote_user=$1
remote_host=$2
local_user=$3
local_host=$4

echo "Testing connection to ${host}..."
ssh -n -o NumberOfPasswordPrompts=0 ${remote_user}@${remote_host}
if [ $? -ne 0 ]; then
    echo "FATAL: You don't have passwordless ssh working."
    echo "Try running ssh-keygen"
    exit 1
fi
echo "Okey. Starting the process."
ssh ${remote_user}@${remote_host} netstat -tulpn > /home/${remote_user}/info.txt;uptime |awk '{ print $3 }' >> /home/${remote_user}/info.txt;
if [ $? -ne 0 ]; then
    echo "An error occurred."
else
    echo "File is ready for gzipping!"
fi
gzip /home/${remote_user}/info.txt
if [ $? -ne 0 ]; then
    echo "file was not archived"
else
    echo "Archive is ready!"
fi
echo "Starting copy archive from ${remote_host} to ${local_host}"
scp /home/${remote_user}/info.txt.gz ${local_user}@${local_host}:/root/
if [ $? -ne 0 ]; then
    echo "Error while transferring!"
else
    echo "Copy has been transferred successfully!"
fi

scp 명령이 나에게 비밀번호 o_O를 요청했습니다.

스크립트의 모든 단계를 수동으로 진행하면 모든 것이 잘 실행되지만 scp스크립트에 비밀번호가 필요합니다. 나는 많이 읽었다스택 교환그리고 이 답을 찾았습니다설정된 SSH 채널 사용. 이 답변에서는 SSH를 켜야 하지만 앞서 말했듯이 내 문제는 SSH를 통해 수동으로 해결할 수 있지만 스크립트에서는 작동하지 않습니다. scp비밀번호 없이 작품을 만들려면 어떻게 해야 하나요 ?

답변1

다음 scp 명령을 실행하는 경우 local_hostscp를 시도하는 것입니다 local_user. local_host물론 local_user원격 <-> 로컬 사용자에 대해서만 암호 없는 로그인을 수행하므로 로컬 <-> 로컬이 아닌 암호를 묻는 메시지가 표시됩니다.

scp /home/${remote_user}/info.txt.gz ${local_user}@${local_host}:/root/

답변2

SSH 키가 이미 설정되어 있는 경우 SFTP를 사용하여 파일을 전송하는 방법을 살펴보세요. 단일 명령을 사용하면 현재 시도하는 방식(ssh, scp, 일반 sftp)처럼 수행할 필요가 없습니다.

관련 정보