如何使用sftp或ssh或paramiko运行自定义命令

时间:2015-04-30 03:13:30

标签: python ssh sftp paramiko

吨 我有以下代码使用ssh和sftp ssh到网络上的构建服务器并运行本机mkdir和chdir命令,如何运行任何自定义命令与我在构建服务器上本地安装的一些可执行文件?

import paramiko

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect('buildservername', username='yadomi', password='password')

sftp = ssh.open_sftp()
sftp.chdir('/local/mnt/workspace/newdir')
commandstring = 'repo init -u git://git.company.com/platform/manifest -b branchname --repo-url=git://git.company.com/tools/repo.git --repo-branch=caf/caf-stable'
si,so,se = ssh.exec_command(commandstring) 
readList = so.readlines()
print readList
print se

错误: -

<paramiko.ChannelFile from <paramiko.Channel 1 (closed) -> <paramiko.Transport at 0x2730310L (cipher aes128-ctr, 128 bits) (active; 1 open channel(s))>>>

1 个答案:

答案 0 :(得分:2)

1)您打开SFTP通道并设置其工作目录,但您从不对该通道执行任何其他操作。也许您认为为后续exec_command设置工作目录?它没有。

2)你做print se,但不认识输出。也许您认为从调用的命令打印错误流?它没有。

试试这个:

import paramiko

ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect('buildservername', username='yadomi', password='password')

commandstring = 'cd /local/mnt/workspace/newdir ; repo init -u git://git.company.com/platform/manifest -b branchname --repo-url=git://git.company.com/tools/repo.git --repo-branch=caf/caf-stable'
si,so,se = ssh.exec_command(commandstring) 
readList = so.readlines()
errList = se.readlines()
print readList
print errList

您的文字问题的答案,&#34; 如何使用我在本地安装在构建服务器上的一些可执行文件运行任何自定义命令?&#34;,&#34;通过将适当的命令行传递给ssh.exec_command()&#34;。