Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 如何使用sftp批处理文件发送密码_Batch File_Passwords_Sftp - Fatal编程技术网

Batch file 如何使用sftp批处理文件发送密码

Batch file 如何使用sftp批处理文件发送密码,batch-file,passwords,sftp,Batch File,Passwords,Sftp,我正在尝试使用批处理脚本从sftp站点下载一个文件。我得到以下错误: Permission denied (publickey,password,keyboard-interactive). Couldn't read packet: Connection reset by peer 运行命令时: sftp -b /home/batchfile.sftp <user>@<server ip>:<folder> 注意:当在提示下运行时,它会工作,如下所示 s

我正在尝试使用批处理脚本从sftp站点下载一个文件。我得到以下错误:

Permission denied (publickey,password,keyboard-interactive).
Couldn't read packet: Connection reset by peer
运行命令时:

sftp -b /home/batchfile.sftp <user>@<server ip>:<folder>
注意:当在提示下运行时,它会工作,如下所示

sftp <user>@<server ip>:<folder>
sftp@:

但是我需要能够自动输入密码。

我建议您使用-v选项运行sftp。了解正在发生的事情变得容易多了

手册明确规定:

最终的使用格式允许使用-b进行自动会话 选项 在这种情况下,有必要配置非交互式身份验证 无需在连接时输入密码(请参阅 有关详细信息,请参阅sshd(8)和ssh-keygen(1)

换句话说,您必须建立公钥身份验证。然后,您将能够运行批处理脚本

附言。
在批处理文件中输入密码是错误的。

您需要安装sshpass程序。然后:

sshpass-p您的\u密码sftp-oBatchMode=no-b您的\u命令\u文件\u路径USER@HOST


显然,最好设置公钥身份验证。仅当出于任何原因无法执行时才使用此命令。

如果要生成一堆要运行的命令,然后从终端调用该脚本,则可以尝试以下操作

sftp login@host < /path/to/command/list
sftplogin@host
然后,系统会要求您输入密码(按照正常方式),但脚本中的所有命令都会在此之后运行


这显然不是一个可以在
cron
作业中使用的完全自动化的选项,但它可以从终端使用。

您提到批处理文件,那么假设您谈论的是Windows系统,我是对的吗?如果是这样,您就不能使用sshpass,您必须切换到其他选项。 其中两种选择遵循截然相反的理念:

  • psftp:可以在批处理脚本中调用的命令行工具;psftp是PuTTY包的一部分,您可以在这里找到它http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
  • Syncplify.me FTP脚本:可编写脚本的Windows FTP/S和SFTP客户端,允许您将密码存储在加密的“配置文件”中;看看这里http://www.syncplify.me/products/ftp-script/
无论哪种方式,强烈建议从密码切换到PKI身份验证

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

您需要使用命令pscp并强制它通过sftp协议。当您安装PuttY(一种通过ssh连接到linux服务器的软件)时,会自动安装pscp

当您使用pscp命令时,以下是命令行:

pscp -sftp -pw <yourPassword> "<pathToYourFile(s)>" <username>@<serverIP>:<PathInTheServerFromTheHomeDirectory>
pscp-sftp-pw”“:

这些参数(-sftp和-pw)仅适用于pscp,而不适用于scp。如果要以递归方式上载文件夹中的所有内容,还可以添加-r。

从批处理文件中删除密码是否有效?其余功能是否正常工作,通过手动输入密码?将密码以明文形式存储在文件中显然是不安全的-如果您不想每次都键入密码,我强烈建议使用RSA密钥身份验证。@lindhe将密码存储在明文文件中显然与在没有密码的情况下使用RSA密钥身份验证一样安全钥匙。如果你想让事情自动化,这是唯一的选择。只需确保纯文本文件仅由文件所有者可读(就像ssh密钥所需的一样),这只是一个想法,但我使用的一种方法似乎与本地私有ssh密钥一样安全,即将文件放在~/.ssh目录中,与.ssh/{your_private_keyfile_name}具有相同的perms。我不推荐以下将密码放入.bashrc的方法,尤其是将其放入导出变量中。bashrc被太多进程读取,密码在您的环境变量中是“纯文本”格式的。如果有疑问,就去做吧。ssh风格:)谢谢!这是唯一能真正回答这个问题的评论。有时根本无法获取密钥文件。为此,请将
导出SSHPASS='your_password'
放到
~/.bashrc
并使用
-e
标志运行。我在一些项目中使用了这个cmd:
echo'ls-t upload/*.xml'| sshpass-e sftp-oBatchMode=no-b-user@example.com| grep-v“sftp>”| head-n1
进一步提高@Lev Lukomsky的级别您可能希望从~/.bashrc中删除组和世界读取权限。我建议“不要”放入.bashrc,因为这是一个一直读取的杂乱文件。尤其不要将密码放在导出的变量或.bash_历史记录中显示的任何地方。。。两者基本上都将把它放在纯文本中,并保持它驻留在内存中。。。无益。将它放在您的.ssh/目录中,放在一个与您的ssh私钥具有相同权限的文件中,并且永远不要以使它驻留在内存中、可通过“ps”显示或在您的环境中的方式使用它。别动!另请参见使用sshpass-e和sshpass env var是一种更安全的方法,而不是在主机上所有用户都可以看到的命令行上传递密码。我对这个答案投了反对票,因为它与问题的要求相反。“P.S.”元素似乎是一个值得探讨的话题。事情很少是“对”或“错”,而是不同因素的妥协和权衡。
pscp -sftp -pw <yourPassword> "<pathToYourFile(s)>" <username>@<serverIP>:<PathInTheServerFromTheHomeDirectory>