我正在以编程方式创建脚本文件,并按如下方式调用psftp.exe
:
psftp user@hostname.com -pw password -b psftpscript.txt
但它会提示用户输入
服务器的主机密钥未缓存在注册表中。你没有 保证服务器是您认为的计算机。该 服务器的rsa2密钥指纹是:[ssh-rsa 1024 somekey] 如果你相信这一点 主机,输入“y”将密钥添加到PuTTY的缓存并继续 连接。如果你想只进行一次连接,没有 将密钥添加到缓存中,输入“n”。如果你不相信这个主人, 按Return键放弃连接。将密钥存储在缓存中? (Y / N)
我需要它完全即时免费,自动。 我尝试了-batch参数,但它只是放弃了连接
答案 0 :(得分:21)
在Windows Server 2008的“沙盒”环境中运行无人参与脚本时遇到了同样的问题。我最终运行了以下内容,在提示符下输入y
:
echo y | psftp user@hostname.com -l username -pw password -b psftpscript.txt
希望这有帮助!
注意:我只需运行一次echo y并在第二次运行时删除它就不再要求缓存密钥了。
答案 1 :(得分:10)
第一次运行时,它会显示服务器的密钥。 复制密钥然后在命令行上,指定您的主机密钥,如下所示:
psftp yourhostAddress -hostkey 06:15:d4:3b:e4:e8:23:c0:d6:6d:45:47:7e:bd:8d:74 -l yourusername -pw yourpassword -batch
答案 2 :(得分:3)
您可以创建一个文件作为输入,只包含y和回车然后运行
psftp user@hostname.com -pw password -b psftpscript.txt < filename.txt
感谢来自http://www.sqlservercentral.com/Forums/Topic281954-9-1.aspx的James提供了这样一个简单的解决方案
答案 3 :(得分:2)
在.Net中,我发现上述方法并不像预期的那样有效。诀窍是使用.Net的内置输入重定向 - 而不是<
运算符。以下是代码现在的样子:
System.Diagnostics.Process proc = new System.Diagnostics.Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "c:\\psftp.exe";
proc.StartInfo.UseShellExecute = false;
proc.StartInfo.RedirectStandardInput = true;
proc.StartInfo.Arguments = strIP + " -v -l " + strUsername + " -pw " + strPassword + " -b " + strBatchFilename;
proc.Start();
StreamWriter myStreamWriter = proc.StandardInput;
myStreamWriter.WriteLine("Y\n"); //override the public key question <---
myStreamWriter.Close();
proc.WaitForExit();
proc.Close();
答案 4 :(得分:1)
我遇到的问题是我没有权限通过远程服务器删除\ rename文件并且文件包含时间戳。 所以我需要按名称下载文件。 psftp不能接受params(或我所知道的任何方式),并且我无法根据当前日期动态更改文件名。
因此,从我调用psftp命令的批处理文件中,我动态创建了命令,并使用带有相关时间戳的文件。 我只能复制今天的文件,然后每次都复制一切。
cd "C:\CX\FTP\IG\Files"
echo cd outbound > C:\SFTP\temp.txt
echo mget file_%date:~10,4%%date:~4,2%%date:~7,2%*.csv >> C:\SFTP\temp.txt
echo quit >> C:\SFTP\temp.txt
echo close >> C:\SFTP\temp.txt
C:\SFTP\psftp cellxpert-prod@ftp.nadex.com -b C:\SFTP\temp.txt
close
exit
&#34; echo cd outbound&gt; C:\ SFTP \ TEMP.TXT&#34;清理旧文件并开始编写新文件的内容。 &#34; echo mget file_%date:~10,4 %% date:~4,2 %% date:~7,2% .csv&gt;&gt; C:\ SFTP \ TEMP.TXT&#34;导致创建命令:&#34; mget file_20151008 .csv&#34;下载所有以&#34; file_20151008 ...&#34;开头的文件接下来的两行刚刚结束了动作和行&#34; C:\ SFTP \ psftp cellxpert-prod@ftp.nadex.com -b C:\ SFTP \ temp.txt&#34;执行它。
结果temp.txt如下所示:
cd outbound
mget file_20151008*.csv
quit
close
答案 5 :(得分:0)
我认为您的命令行存在问题。
Usage: psftp [options] [user@]host
尝试:
psftp -pw password -b psftpscript.txt user@hostname.com
答案 6 :(得分:0)
这不会直接回答您的问题,但提供了一种可能的解决方法:
以将运行脚本并手动接受证书的用户身份启动命令提示符。然后在未来的连接中,你将不会遇到问题。
鉴于您的需要,除了已经陈述的内容之外,这可能会也可能不起作用。我带着同样的问题来到这个问题,并最终使用我刚刚描述的方法解决它。
答案 7 :(得分:-2)
我最后通过在提示符下输入'y'来添加密钥以进行缓存。我不得不只做一次,之后没有更多的提示,它运作良好。
答案 8 :(得分:-2)
以上建议都不适合我,但是我确实找到了DID对我有用的东西。
我在我的批处理文件中输入了2个条目,使其起作用。
第一项使连接缓存在注册表中。
第二个条目将自动连接,因为现在主机密钥已缓存在注册表中。
echo y | psftp.exe username@hostname.com -pw password
psftp.exe username@hostname.com -pw password -v -be -batch -b psftp_upload_command.bat