我是新的python。我寫了一個腳本來連接到主機,並執行一個命令python paramiko ssh
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=pw)
print 'running remote command'
stdin, stdout, stderr = ssh.exec_command(command)
stdin.close()
for line in stdout.read().splitlines():
print '%s$: %s' % (host, line)
if outfile != None:
f_outfile.write("%s\n" %line)
for line in stderr.read().splitlines():
print '%s$: %s' % (host, line + "\n")
if outfile != None:
f_outfile.write("%s\n" %line)
ssh.close()
if outfile != None:
f_outfile.close()
print 'connection to %s closed' %host
except:
e = sys.exc_info()[1]
print '%s' %e
工作正常時,則遠程命令不需要TTY。我發現一個invoke_shell示例Nested SSH session with Paramiko。我對這個解決方案並不滿意,因爲如果一個服務器有一個未在我的腳本中指定的提示 - >無限循環或腳本中的指定提示是返回文本中的字符串 - >並非所有數據都會被接收。有沒有更好的解決方案,可能在哪裏stdout和stderr發回像我的腳本?
,而不是'data_block'應該使用'session.recv(4096)'和'session.recv_stderr(4096)'例如(在哪裏了'data_block'來嗎?)。 –
你是對的,data_block就像你描述的那樣(recv/recv_stderr),但是我意外刪除了這些行。 – ThePracticalOne
截至2015年5月,Paramiko文檔是[here](http://docs.paramiko.org/en/1.15/index.html) – Jeremiah