将文件从一台计算机复制到另一台计算机而不询问密码

将文件从一台计算机复制到另一台计算机而不询问密码

我目前正在使用这个命令。我在另一台机器上(ip1)

scp file.txt root@ip2:/home/praveen/test.c /home/praveen

该命令将提示输入密码。

我在一些 shell 脚本中使用它,并从一些 crontab 文件调用这些脚本。所以,我不能每次都输入密码。有什么方法可以禁用密码询问或其他方式从某处输入密码,这样我就不需要再次输入密码。

我不能使用ssh-keygen,因为我必须只对这些脚本执行操作。当我使用时ssh-keygen,它永远不会再次提示我输入密码。我不想要这个。其余的事情应该照常进行。

答案1

目前尚不清楚为什么您无法使用ssh-keygen以及随后的密钥交换。我相信这是推荐的做法。

另一种方法是使用expect命令 (在线手册页)。这可以消除交互过程中的用户干预。顾名思义,它需要一个提示,并按照指定的方式做出相应的响应。

看看这个解决方案使用自动化 SSHexpect。引用几行:

# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"

第二行指定出现的提示。在这种情况下,它要求输入密码。第四行将密码发送到服务器。

答案2

如果远程服务器允许,您可以使用 ftp。这是我用于此目的的 shell 脚本示例

HOST='remote.server.com'
USER='domainname/usrid'   
PASSWD='p@@ssw0rd'
cd /path/to/local/directory/containing/the/file/to/be/transferred
`ftp -n $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd /diretory/on/remote/server
put file2transfer.dat 
bye    
quit
END_SCRIPT`

答案3

由于没有人发布实际答案。

是的,如评论中所述。您需要创建公钥/私钥对。

这里有2本手册:

然后,您可以利用ssh-agent将密钥加载到内存中,这样您就不必输入为密钥指定的密码 - 因为它们存储在当前会话的内存中。您不必首先设置密码,但我建议您这样做,因为持有您私钥的人可能会使用它来危害您。


当然,您可以随后删除密钥或从~/.ssh/authorized_keys远程主机上删除您的公钥。然后他会再次提示你输入密码。

答案4

一个简单的解决方案是:

echo "password" | scp -r myfile user@remotehost:/home/user/destination 

相关内容