如何在脚本中使用 SFTP 以非交互方式从远程主机拉取文件?

如何在脚本中使用 SFTP 以非交互方式从远程主机拉取文件?

我想使用 shell 脚本从另一台服务器提取文件。我已经编写了一个脚本,我可以在其中执行此操作,但我希望该脚本以非交互方式工作,这样它就不会提示我输入密码,并且如果我硬编码相同的内容并让脚本拥有所需的内容,它就会自动工作。

我之前已经这样做过,FTP但是,在新服务器中,FTP连接被阻止,我们只能使用SCPSFTP。我之前的脚本是这样的,它曾经使用过FTP并且在不需要密码的情况下很好地完成了工作:

#!/bin/bash -vx
ftp -in 100.XXX.XXX.XX<<END_SCRIPT
quote USER username
quote PASS password
bin
prompt off
cd /directory/in/remote/host
lcd /directory/in/local/machine
mget *
bye
END_SCRIPT

SFTP我在脚本中尝试了类似的方法,它适用于交互模式,但就像FTP我无法使用SFTP.以下是我从远程计算机获取特定文件的代码:

#!/bin/bash -vx

path="/tmp/testanks"

sftp [email protected] <<EOT
cd $path
get Bharti*
quit
EOT

我如何更改上面的代码,以便我可以为该脚本提供用户名和密码以使其非交互式。

我知道提供硬编码密码是一个安全问题,但现在我更关心的是立即获取文件。如果我能得到安全的方法以及我想要的答案,我将非常感激。

答案1

卷曲:

curl sftp://example.com/file.zip -u user:password 

请注意,为此公钥认证优先使用密码:

curl sftp://example.com/file.zip -u user

这将尝试用作~/.ssh/id_rsa私钥。您可以使用 指定另一项--key

答案2

解决方案是使用scp,将本地的公钥添加到远程authorized_keys文件的末尾。

然后

 scp [email protected]:Bharthi/* $path

在本地主机上,查看.ssh目录,如果没有任何 .pub,请首先执行以下操作(并且仅一次)

ssh-keygen (1)
scp-copy-id [email protected] (2)
  1. 接受所有默认值,提示时不要输入密码
  2. 输入用户名@100.XXX的密码

相关内容