如何将值传递给psftp提示符

时间:2011-09-27 23:15:46

标签: sftp putty

我正在以编程方式创建脚本文件,并按如下方式调用psftp.exe

psftp user@hostname.com -pw password -b psftpscript.txt

但它会提示用户输入

  

服务器的主机密钥未缓存在注册表中。你没有   保证服务器是您认为的计算机。该   服务器的rsa2密钥指纹是:[ssh-rsa 1024 somekey]   如果你相信这一点   主机,输入“y”将密钥添加到PuTTY的缓存并继续   连接。如果你想只进行一次连接,没有   将密钥添加到缓存中,输入“n”。如果你不相信这个主人,   按Return键放弃连接。将密钥存储在缓存中? (Y / N)

我需要它完全即时免费,自动。 我尝试了-batch参数,但它只是放弃了连接

9 个答案:

答案 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



相关问题