web-dev-qa-db-ja.com

Scpスクリプトでパスワードなしのsshに対するコマンド

これが私の問題です:パスワードを入力せずにリモートサーバーに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をパスワードなしで機能させるにはどうすればよいですか?

2
fuser

以下の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/
1
VenkatC

すでにsshキーを設定している場合は、sftpを使用してファイルの転送を調べます。単一のコマンドで、現在実行しようとしている方法で実行する必要はありません。つまり、ssh、scp、プレーンsftpが機能します。

0
mtk