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

Ank*_*tha 8 scp sftp shell-script

我想使用 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
Run Code Online (Sandbox Code Playgroud)

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

#!/bin/bash -vx

path="/tmp/testanks"

sftp username@100.XXX.XX.XXX <<EOT
cd $path
get Bharti*
quit
EOT
Run Code Online (Sandbox Code Playgroud)

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

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

Per*_*ere 10

随着卷曲

curl sftp://example.com/file.zip -u user:password 
Run Code Online (Sandbox Code Playgroud)

请注意,公钥身份验证优于使用密码:

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

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


Arc*_*mar 6

解决方法是使用scp,你将本地的公钥添加到远程authorized_files的末尾。

然后

 scp username@100.X.X.X:Bharthi/* $path
Run Code Online (Sandbox Code Playgroud)

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

ssh-keygen (1)
scp-copy-id username@100.X.X.X (2)
Run Code Online (Sandbox Code Playgroud)
  1. 接受所有默认值,提示时不要输入密码
  2. 输入用户名密码@ 100.XXX

  • 看起来服务器可以阻止“scp”并强制执行“sftp”。我尝试使用“scp”并收到此消息:*此服务仅允许 sftp 连接。*。我记得,这可能是由于 chroot 环境只适用于 sftp,不适用于 scp。(待确认)。 (2认同)
  • SFTP 不需要 shell 登录,scp 和 rsync 需要。记住这一点。 (2认同)