これが私の問題です:パスワードを入力せずにリモートサーバーに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 /home/remote/info.txt.gz local@Host:/root/
のようなリモートマシンでscpコマンドを実行でき、すべてが完全に機能しました。
次に、以下に説明するいくつかのアクションを使用してスクリプトを作成しようとしましたが、スクリプトの最後のステップは
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
がパスワードを要求しました。私はstackexchangeをよく読んで、この答えを見つけました すでに確立されたSSHチャネルを使用 。この回答にはOpenSSHが必要ですが、私の問題は、前述のようにSSHを介して手動で解決できますが、スクリプトでは機能しませんでした。scp
をパスワードなしで機能させるにはどうすればよいですか?
以下のscpコマンドがlocal_Host
で実行されている場合は、scp as local_user
to local_Host
as local_user
-もちろん、これはパスワードの入力を求めます。リモート<->ローカルユーザーのみのパスワードレスログイン-ローカルではない<->ローカル
scp /home/${remote_user}/info.txt.gz ${local_user}@${local_Host}:/root/
すでにsshキーを設定している場合は、sftpを使用してファイルの転送を調べます。単一のコマンドで、現在実行しようとしている方法で実行する必要はありません。つまり、ssh、scp、プレーンsftpが機能します。