脚本中无需密码即可通过 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_host,那么您正在尝试 scp as local_user-local_host当然local_user这会提示输入密码,因为您仅对远程 <-> 本地用户进行无密码登录 - 而不是本地 <-> 本地

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

答案2

如果您已经设置了 ssh 密钥,请研究使用 sftp 传输文件。单个命令,您不需要按照当前尝试的方式进行操作,即 ssh 然后 scp,普通 sftp 就可以了。

相关内容