我使用FileZilla通过SFTP连接到服务器,并接受将服务器的SSH密钥添加到FileZilla中的密钥缓存中.
如何将此缓存密钥提取到密钥文件,以便可以通过其他需要密钥文件的SFTP应用程序使用它?
我无法在与此相关的FileZilla文档中找到任何内容.
在实现低级HTTP和FTP传输时,如何选择缓冲区的大小(我从套接字读取或写入的字节数)以获得最大吞吐量?我的应用程序应该使用HTTP或FTP在130 Kbps到3 Mbps之间的连接上传输数据(我事先知道预期的速度).有时它是单向转移,有时它是双向转移.我应该坚持使用一些平均缓冲区大小,还是必须根据连接速度改变它?
谢谢.
我正在使用此脚本连接到示例ftp服务器并列出可用目录:
from ftplib import FTP
ftp = FTP('ftp.cwi.nl') # connect to host, default port (some example server, i'll use other one)
ftp.login() # user anonymous, passwd anonymous@
ftp.retrlines('LIST') # list directory contents
ftp.quit()
Run Code Online (Sandbox Code Playgroud)
如何使用ftp.retrlines('LIST')输出来检查目录(例如public_html)是否存在,是否存在cd,然后执行其他一些代码并退出; 如果不立即执行代码并退出?
是否有现成的Java功能可以在远程FTP服务器上创建文件夹层次结构.Apache Commons确实提供了一个FTP客户端,但我找不到创建目录层次结构的方法.它确实允许创建一个目录(makeDirectory),但是创建一个完整的路径似乎并不存在.我想要这个的原因是因为有时目录层次结构的某些部分(尚未)可用,在这种情况下,我想创建层次结构的缺失部分,然后更改为新创建的目录.
我尝试将文件上传到FTP服务器上的目录.我用这个方法FtpWebRequest.我想将一个文件上传到该用户的主目录,但我总是收到以下错误消息:
请求的URI对此FTP命令无效.
有什么问题?我试过关闭被动模式,但它仍然是一样的.
static void FtpUpload()
{
// Get the object used to communicate with the server.
FtpWebRequest request = (FtpWebRequest)WebRequest.Create("ftp://12.22.44.45");
request.Method = WebRequestMethods.Ftp.UploadFile;
request.UsePassive = false;
// This example assumes the FTP site uses anonymous logon.
request.Credentials = new NetworkCredential("pokus", "password");
// Copy the contents of the file to the request stream.
StreamReader sourceStream = new StreamReader(path);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;
Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();
FtpWebResponse response = (FtpWebResponse)request.GetResponse(); …Run Code Online (Sandbox Code Playgroud) 这个代码有点问题.脚本连接,但它不会给我位于根目录中的文件夹...我错过了什么?
$ftp_server = "ftp.something.com";
$ftp_user = "user";
$ftp_pass = "pass";
// set up a connection or die
$conn_id = ftp_connect($ftp_server) or die("Couldn't connect to $ftp_server");
// try to login
if (@ftp_login($conn_id, $ftp_user, $ftp_pass))
{
echo "Connected as $ftp_user@$ftp_server\n";
}
else
{
echo "Couldn't connect as $ftp_user@$ftp_server\n";
}
$contents = ftp_nlist($conn_id, ".");
var_dump($contents);
ftp_close($conn_id);
die;
Run Code Online (Sandbox Code Playgroud)
它输出
Connected as $ftp_user@$ftp_server;
Run Code Online (Sandbox Code Playgroud)
和
boolean false
Run Code Online (Sandbox Code Playgroud)
为什么它不会列出文件?
我可以非常快速地解决这个问题
file_exists("ftp//user:pass@host.com")
Run Code Online (Sandbox Code Playgroud)
......但是容易的部分不是我想要的东西,我什么都不会学到
我试图远离另一个批处理文件,是可能的.我有一个SSIS包,从SQL中提取数据,创建一个文本文件,然后将这些文件发送到外部ftp站点.如果我从我的工作站或从服务器手动运行它,该程序包就可以运行.但是,当我将其作为SQL作业中的一个步骤运行时,该步骤失败 - 程序包无法连接.
使用SQL任务提取数据,For Each Loop Container用于创建文本文件,然后脚本任务用于ftp部分.
出于故障排除的目的,在脚本任务中,我在每次操作后都将文本放入代码中,并提供有助于显示错误发生位置的信息.我获取运行作业的用户,某些变量的值和连接字符串,然后将其写入日志表.这就是我在尝试连接时知道包失败的方式 - 我从ftp.Connect()收到一个错误的布尔值.
该包具有ftp连接信息的变量,我使用这些值的配置文件.但是,我已将值硬编码到测试代码中,并产生相同的结果.
我还尝试添加一个新连接到连接管理器与使用现有连接 - 没有区别.
我排除了任何网络/阻塞/防火墙问题.服务器允许ftp连接.
我也试着像我一样手动运行包,并尝试从作业中运行SSIS包的域用户(sqlagent域用户).从我的工作站和服务器,从任一帐户手动运行它.要从我的工作站手动运行它,我使用Visual Studio调试.要从服务器手动运行它,我在连接到服务器上的Integration Services实例时使用"运行包".
在下面的代码片段中,我复制并粘贴了脚本任务的部分内容 - 它应该包含所有ftp代码.我没有粘贴获取文件名和发送文件的部分.错误总是发生在连接部分.
我想要的是1)帮助使其工作,或2)帮助确定如何从ftp.Connect获得更多的响应 - 布尔只是告诉我很多,或3)某人是专家告诉我只是应该使用一个批处理文件,并停止在墙上敲打我的头:)
我保证我做了很多研究,并且我发现了很多关于如何做ftp的帖子 - 但不是解决了这个问题.再次,代码工作,所以我知道如何做ftp部分本身.如果有一个我没看到的重复帖子,我道歉并将从那里读取而不是让某人在这里发布答案.:)
补充数据:服务器 - Windows 2008 Enterprise SP2; 工作站 - Windows XP SP3; SQL/SSIS:SQL Server 2008 R2
SQL作业步骤 - 类型:SSIS包; 运行方式:SQL Server代理服务帐户(名为sqlagent的域帐户); 身份验证:Windows身份验证
脚本任务代码:
string errMsg = null;
errMsg = "user: " + System.Security.Principal.WindowsIdentity.GetCurrent().Name + "; ";
ConnectionManager cm = Dts.Connections["FTP_ABN"];
cm.ConnectionString = Dts.Variables["FTP_url"].Value.ToString() + ":21." + Dts.Variables["FTP_username"].Value.ToString();
cm.Properties["ServerName"].SetValue(cm, Dts.Variables["FTP_url"].Value.ToString());
cm.Properties["ServerPort"].SetValue(cm,"21");
cm.Properties["ServerUserName"].SetValue(cm, Dts.Variables["FTP_username"].Value.ToString());
cm.Properties["ServerPassword"].SetValue(cm, Dts.Variables["FTP_password"].Value.ToString()); …Run Code Online (Sandbox Code Playgroud) 我的程序可以使用以下代码将文件上传到FTP服务器:
WebClient client = new WebClient();
client.Credentials = new System.Net.NetworkCredential(ftpUsername, ftpPassword);
client.BaseAddress = ftpServer;
client.UploadFile(fileToUpload, WebRequestMethods.Ftp.UploadFile, fileName);
Run Code Online (Sandbox Code Playgroud)
现在我需要删除一些文件,我不能这样做.我该怎么用而不是
client.UploadFile(fileToUpload, WebRequestMethods.Ftp.UploadFile, fileName);
Run Code Online (Sandbox Code Playgroud) $ftpServer = "ftp.example.com"
$username ="validUser"
$password ="myPassword"
$localToFTPPath = "C:\ToFTP"
$localFromFTPPath = "C:\FromFTP"
$remotePickupDir = "/Inbox"
$remoteDropDir = "/Outbox"
$SSLMode = [AlexPilotti.FTPS.Client.ESSLSupportMode]::ClearText
$ftp = new-object "AlexPilotti.FTPS.Client.FTPSClient"
$cred = New-Object System.Net.NetworkCredential($username,$password)
$ftp.Connect($ftpServer,$cred,$SSLMode) #Connect
$ftp.SetCurrentDirectory($remotePickupDir)
$ftp.GetFiles($localFromFTPPath, $false) #Get Files
Run Code Online (Sandbox Code Playgroud)
这是我从FTP服务器导入文件的脚本.
但是我不确定是什么remotePickupDir,这个脚本是否正确?
我在debian-7-wheezy上运行一个实例,我对Google Compute Engine有点新意.我查看了本网站上的支持请求和Google网站上的常见问题解答帖子; 但是我发现没有什么可以完全遵循的.
我知道一小部分关于Linux(管理一个专用的Debian盒子大约6个月),但我也无法从家用PC访问SSH.
我希望逐步了解如何使用WinSCP(或其他文件浏览器)访问FTP/SFTP,以及如何使用Putty从创建实例到连接实例来从家用PC访问SSH .
提前感谢您的帮助,对不起是一个新手.