使用python paramiko将本地字符串写入远程文件

时间:2013-06-04 09:49:03

标签: python paramiko

我需要使用python的paramiko模块将字符串写入远程主机上的文件。我一直在尝试各种重定向输入的方法,但没有成功。

下面的代码片段中的localstring填充了cat命令的结果

stdin, stdout, stderr = hydra.exec_command('cat /file.txt')
localstring = stdout.read()
manipulate(localstring)
hydra.exec_command('cat > newfile.txt\n' + localstring + '\n')

我似乎让我的脚本挂起或收到EOF错误,或者根本没有生成的字符串出现在文件中。请注意,该文件有多行。

3 个答案:

答案 0 :(得分:6)

你也可以使用ftp功能:

import paramiko

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('example.com', username='username', password='password')

ftp = ssh.open_sftp()
file=ftp.file('remote file name', "a", -1)
file.write('Hello World!\n')
file.flush()
ftp.close()
ssh.close()

答案 1 :(得分:0)

cat正在阅读stdin。请改用echo

'echo ' + localstring + ' > newfile.txt'

如果需要回显多行,请使用-e标志:

echo -e "Line1\nLine2\n" > file.txt

答案 2 :(得分:0)

作为@Nigel答案的一种变体,您可以使用putfo,(默认情况下)import paramiko from io import BytesIO ssh = paramiko.SSHClient() ssh.connect(…) ftp = ssh.open_sftp() ftp.putfo(BytesIO(localstring.encode()), 'newfile.txt') ftp.close() ssh.close() 会在写入后另外验证文件的大小,并确保文件已正确关闭。

{{1}}

[编辑]不要使用StringIO,因为它会报告字符数作为长度,而paramiko使用stat来报告远程系统上文件的字节数。如果它们不匹配,则传输失败。