如何将远程服务器中的文件复制/maindir/fil1.txt到子目录/maindir/subdir/file1.txt。我使用 实现了 SFTP paramiko。但它总是检查要复制的本地路径。
filename_full_path='/maindir/fil1.txt'
destfilename_full_path='/maindir/subdir/file1.txt'
sftp.put(filename_full_path, destfilename_full_path)
Run Code Online (Sandbox Code Playgroud)
如何告诉SFTP本地路径也在远程主机中?
我有以下问题:
我需要连接到 FTP 并读取一个 CSV 文件。主要问题是它的密码有@、$、%...我如何连接特殊字符?我尝试了以下几种连接方式:
文件打开
$filename = 'ftp://user:p@s($word@ftp.myftp.url/file.csv';
$handle = fopen($filename, "r") or die("Error");
Run Code Online (Sandbox Code Playgroud)
FTP登录
$ftp_server = "ftp.myftp.url/file.csv";
$ftp_user = "user";
$ftp_pass = "p@s($word";
$conn_id = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
$login_result = ftp_login($ftp_server, $ftp_user, $ftp_pass) or die("Could not connect to 2");
$data = file_get_contents('ftp.myftp.url/file.csv');
Run Code Online (Sandbox Code Playgroud)
感谢大家!
我正在通过 SSH 连接到一台 Linux 机器,并再次希望通过 SSH 连接到另一台 Linux 机器来执行一些 Perforce 任务。
using (SshClient ssh = new SshClient("ip address","username", "pwd"))
{
ssh.Connect();
command = ssh.CreateCommand("ssh hostname");
result = command.Execute();
Console.WriteLine(result);
}
Run Code Online (Sandbox Code Playgroud)
其中ssh hostname是无密码的ssh。如何控制第二个 SSH 会话并向其传递命令?
甚至探索了该CreateShell功能,但似乎不建议自动化。
我想使用 JSch 在远程位置显示目录的完整层次结构。该位置有多个文件夹,一个文件夹可能有也可能没有文件。
我写的代码(参考SFTP Read all files in directory):
sftpChannel.cd(remotePath);
Vector<String> files = sftpChannel.ls("*");
List<String> ret=new ArrayList<>();
for (int i = 0; i < files.size(); i++)
{
Object obj = files.elementAt(i);
if (obj instanceof com.jcraft.jsch.ChannelSftp.LsEntry)
{
LsEntry entry = (LsEntry) obj;
if (true && !entry.getAttrs().isDir())
{
ret.add(entry.getFilename()+"file");
}
if (true && entry.getAttrs().isDir())
{
if (!entry.getFilename().equals(".") && !entry.getFilename().equals(".."))
{
ret.add(entry.getFilename()+"folder");
}
}
}
}
System.out.println(ret);
Run Code Online (Sandbox Code Playgroud)
此代码仅显示顶级文件夹名称,不会读取这些文件夹中的文件。
我正在使用 jsch-0.1.54。
谢谢
我想将文件从远程服务器复制到本地。
import paramiko
paramiko.util.log_to_file('/tmp/paramiko.log')
# open transport
username = "user"
host="example.com"
port = 22
transport = paramiko.Transport((host, port))
transport.start_client()
private_key_file = "/home/user/.ssh/id_rsa"
agent = paramiko.Agent()
key = paramiko.RSAKey.from_private_key_file(private_key_file)
transport.auth_publickey(username, key)
# get sftp client
sftp = paramiko.SFTPClient.from_transport(transport)
source = "/home/user/user_1.csv"
target = "/home/local/local_sftp.txt"
sftp.get(x[0], x[1])
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但我想使用source = "/home/user/user_*.csv"但未评估此通配符。有人可以帮我解决这个问题。
我找到了一种解决方案,SCPClient但无法解决SFTPClient.
我创建了 Inno Setup 脚本,它运行良好,但我想更改OutputDir为在我的桌面上创建输出文件。但是不是在桌面上创建输出文件,而是{userdesktop}在同一目录中创建子文件夹,脚本所在的位置和输出在其中。
到目前为止我找到了解决方案,但我相信应该有更好的方法。我错过了什么?
; these attempts didn't work
[Setup]
OutputDir={userdesktop}
; some more attampts:
OutputDir=userdesktop
OutputDir=userdesktop:
OutputDir="{userdesktop}"
; this workaround worked for me
[Setup]
OutputDir=userdocs:..\Desktop
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Paramiko Python 模块通过 SSH 连接到远程服务器。在 CentOS 7 服务器上使用 Python 3.6.7 版安装。但是收到以下错误。
python
import paramiko
>>> ssh = paramiko.SSHClient()
>>> ssh.load_system_host_keys()
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
>>> ssh.connect("19.16.2.2", username="user1", password="pass")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/site-packages/paramiko/client.py", line 424, in connect
passphrase,
File "/usr/local/lib/python3.6/site-packages/paramiko/client.py", line 643, in _auth
self._agent = Agent()
File "/usr/local/lib/python3.6/site-packages/paramiko/agent.py", line 372, in __init__
self._connect(conn)
File "/usr/local/lib/python3.6/site-packages/paramiko/agent.py", line 68, in _connect
raise SSHException('could not get keys from ssh-agent')
paramiko.ssh_exception.SSHException: could not get keys from …Run Code Online (Sandbox Code Playgroud) 我在 etl 工作(第一次),我需要从客户端的 SFTP 中提取一些文件。我的问题是,文件数量是可变的,所以我需要检查,如果文件中存在,并得到它,该文件格式,如“_文件YYYY-MM-DD -number- ñ ”,其中YYYY-MM-DD是当前的日期和n是文件的编号,因此如果有 7 个文件,我必须查找:
直到现在我发现我可以做这样的事情
cnopts = pysftp.CnOpts()
with pysftp.Connection(host=host, port=port, username=username, password=password, cnopts=cnopts) as sftp:
files = sftp.listdir(directory)
Run Code Online (Sandbox Code Playgroud)
我如何在那里的文件中找到?
我想使用 pysftp 0.2.8 将多个文件从 Windows 目录上传到 SFTP 服务器。我已经阅读了文档,它建议使用put_dorput_r但两者都给我以下错误:
OSError:无效路径:
sftp_local_path = r'C:\Users\Swiss\some\path'
sftp_remote_path = '/FTP/LPS Data/ATC/RAND/20191019_RAND/XML'
with pysftp.Connection("xxx.xxx.xxx.xxx", username=myUsername, password=myPassword) as sftp:
with sftp.cd(sftp_remote_path):
sftp.put_r(sftp_local_path, sftp_remote_path)
for i in sftp.listdir():
lstatout=str(sftp.lstat(i)).split()[0]
if 'd' in lstatout: print (i, 'is a directory')
sftp.close()
Run Code Online (Sandbox Code Playgroud)
我希望能够将本地目录中的所有文件或选定文件复制到 SFTP 服务器。
我正在尝试在 Delphi 中创建一个链表实现,但无法创建节点,因为我需要检查头指针是否为空。我现在使用的代码如下所示:
procedure LinkedList.addNode(newNode: Node);
var lastNode: Node;
begin
if pHead = nil then
pHead := @newNode
else
lastNode := peekLastNode(pHead^);
lastNode.pNext := @newNode;
end;
Run Code Online (Sandbox Code Playgroud)
程序在添加一个元素后就冻结了,所以 nil 部分是无限期的问题。
这是整个程序:
program LinkedListImplementation;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
type
Node = record
data: string;
pNext: ^Node;
end;
type
LinkedList = class
pHead: ^Node;
function peekLastNode (currentNode: Node) : Node;
function listToString(currentNode: Node) : String;
procedure addNode (newNode: Node);
end;
//the initial parameter for this function is LinkedList.pHead^
function LinkedList.peekLastNode (currentNode: …Run Code Online (Sandbox Code Playgroud)