def execute(self,command):
to_exec = self.transport.open_session()
to_exec.exec_command(command)
print 'Command executed'
connection.execute("install.sh")
当我检查远程系统时,我发现脚本没有运行。任何线索?
答案 0 :(得分:17)
下面的代码将执行您想要的操作,您可以将其调整为execute
函数:
from paramiko import SSHClient
host="hostname"
user="username"
client = SSHClient()
client.load_system_host_keys()
client.connect(host, username=user)
stdin, stdout, stderr = client.exec_command('./install.sh')
print "stderr: ", stderr.readlines()
print "pwd: ", stdout.readlines()
但是请注意,这些命令会默认显示在您的$HOME
目录中,因此您需要在install.sh
中使用$PATH
或者您需要(最有可能) cd
到包含install.sh
脚本的目录。
您可以使用以下方法检查默认路径:
stdin, stdout, stderr = client.exec_command('getconf PATH')
print "PATH: ", stdout.readlines()
但是,如果它不在您的路径中,您可以cd
并执行如下脚本:
stdin, stdout, stderr = client.exec_command('(cd /path/to/files; ./install.sh)')
print "stderr: ", stderr.readlines()
print "pwd: ", stdout.readlines()
如果脚本不在$PATH
中,则您需要使用./install.sh
而不是install.sh
,就像您在命令行中一样。
如果您在上面的所有内容后仍然遇到问题,那么检查install.sh
文件的权限也是一件好事:
stdin, stdout, stderr = client.exec_command('ls -la install.sh')
print "permissions: ", stdout.readlines()
答案 1 :(得分:0)
ssh = paramiko.client.SSHClient()
ssh.set_missing_host_key_policy(paramiko.client.AutoAddPolicy())
ssh.connect(hostname=host, username=username, password = password)
chan = ssh.invoke_shell()
def run_cmd(cmd):
print('='*30)
print('[CMD]', cmd)
chan.send(cmd + '\n')
time.sleep(2)
buff = ''
while chan.recv_ready():
print('Reading buffer')
resp = chan.recv(9999)
buff = resp.decode()
print(resp.decode())
if 'password' in buff:
time.sleep(1)
chan.send(password + '\n')
time.sleep(2)
print('Command was successful: ' + cmd)
答案 2 :(得分:-3)
subprocess.Popen('ssh thehost install.sh')
请参阅subprocess
模块。