我正在尝试使用批处理脚本从sftp站点下载文件。我收到以下错误:
Permission denied (publickey,password,keyboard-interactive).
Couldn't read packet: Connection reset by peer
运行命令时:
sftp -b /home/batchfile.sftp <user>@<server ip>:<folder>
batchfile.sftp
包含以下数据:
password
lcd [local folder]
cd [sftp server folder]
get *
bye
注意:在提示符下运行时它正在运行
sftp <user>@<server ip>:<folder>
但我需要能够自动输入密码。
答案 0 :(得分:42)
您需要安装sshpass程序。然后:
sshpass -p YOUR_PASSWORD sftp -oBatchMode=no -b YOUR_COMMAND_FILE_PATH USER@HOST
显然,最好设置公钥认证。只有在无论出于何种原因无法做到的情况下才使用它。
答案 1 :(得分:16)
如果要生成要运行的命令堆,然后从终端调用该脚本,则可以尝试以下操作。
sftp login@host < /path/to/command/list
然后会要求您输入密码(按照正常情况),但是之后脚本中的所有命令都会运行。
这显然不是可以在cron
作业中使用的完全自动化选项,但可以在终端中使用。
答案 2 :(得分:1)
我建议你用-v选项运行sftp。它变得更容易理解正在发生的事情。
手册明确指出:
最终使用格式允许使用-b进行自动会话 选项。 在这种情况下,需要配置非交互式身份验证 避免在连接时输入密码的需要(见 sshd(8)和ssh-keygen(1)了解详情。
换句话说,您必须建立一个publickey身份验证。然后,您将能够运行批处理脚本。
P.S。 将密码放入批处理文件中是错误的。
答案 3 :(得分:0)
PSFTP -b path/file_name.sftp user@IP_server -hostkey 1e:52:b1... -pw password
文件内容为:
lcd "path_file for send"
cd path_destination
mput file_name_to_send
quit
运行主机密钥:
psftp user@IP_SERVER
答案 4 :(得分:0)
您需要使用命令pscp并强制其通过sftp协议。当您安装PuttY(通过ssh连接到linux服务器的软件)时,会自动安装pscp。
当您有pscp命令时,这里是命令行:
pscp -sftp -pw <yourPassword> "<pathToYourFile(s)>" <username>@<serverIP>:<PathInTheServerFromTheHomeDirectory>
这些参数(-sftp和-pw)仅适用于pscp,不适用于scp。如果要以递归方式上载文件夹中的所有内容,也可以添加-r。
答案 5 :(得分:-1)
你提到批处理文件,我是否正确然后假设你在谈论Windows系统?如果是这样,你就不能使用sshpass,你将不得不切换到另一个选项。
两种完全相反的哲学背后的选择是:
无论哪种方式,强烈建议从密码切换到PKI身份验证。