私の問題は次のとおりです。パスワードを入力せずに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_host
scpを試してくださいlocal_user
。local_host
もちろん、local_user
リモート<->ローカルユーザーに対してのみパスワードのないログインを実行するため、ローカル<->ローカル以外のパスワードの入力を求められます。
scp /home/${remote_user}/info.txt.gz ${local_user}@${local_host}:/root/
答え2
SSHキーがすでに設定されている場合は、SFTPを使用してファイルを転送する方法を見てください。単一のコマンドを使用すると、現在試している方法(ssh、scp、通常のsftp)のように行う必要はありません。