スクリプトでは、パスワードなしで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_userlocal_hostもちろん、local_userリモート<->ローカルユーザーに対してのみパスワードのないログインを実行するため、ローカル<->ローカル以外のパスワードの入力を求められます。

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

答え2

SSHキーがすでに設定されている場合は、SFTPを使用してファイルを転送する方法を見てください。単一のコマンドを使用すると、現在試している方法(ssh、scp、通常のsftp)のように行う必要はありません。

関連情報