私はpythonが初めてです。ホストに接続して 1 つのコマンドを実行するスクリプトを作成しました
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を必要としない場合、正常に動作します。Paramiko を使用した invoke_shell の例の入れ子になった SSH セッションが見つかりました。サーバーにスクリプトで指定されていないプロンプトがある場合->無限ループまたはスクリプトで指定されたプロンプトが戻りテキストの文字列であるため、このソリューションには満足していません->すべてのデータが受信されるわけではありません. 私のスクリプトのように stdout と stderr が送り返されるより良い解決策はありますか?