2017-02-09 7 views
0

リモートホストにsshするpythonスクリプトを実行する必要があります。このリモートホスト上で実行する最初のコマンドは "sudo su"です。私はそれのためのパスワードを持っています。次に、ディレクトリにcdしてローカルボックスにファイルをコピーする必要があります。私は2つの方法で試しました。両方とも動作しません。ユーザを変更するためのPython sshコマンド

スクリプト#1:

ssh=paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostName,username='e0258595',password='<password>') 
stdin,stdout,stderr = ssh.exec_command("sudo su; whoami") 
stdin.write('password\n') 
stdin.flush() 
data = stdout.readlines() 
for line in data: 
    print line 

出力はまだe0258595です。

スクリプト#2:

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(hostName, username="e0258595", password="<password>") 
transport = ssh.get_transport() 
session = transport.open_session() 
session.set_combine_stderr(True) 
session.get_pty() 
#for testing purposes we want to force sudo to always to ask for password. because of that we use "-k" key 
session.exec_command("sudo su; whoami") 
stdin = session.makefile('wb', -1) 
stdout = session.makefile('rb', -1) 
#you have to check if you really need to send password here 
stdin.write("<password>"+'\n') 
stdin.flush() 
data = stdout.readlines() 
for line in data: 
    print line 

この1つだけでハングアップ。

何が問題ですか?

+1

対話型ルートシェルには 'sudo -s'または' sudo -i'を使用してください。 –

+0

また、一度に1つのコマンドを送信してみてください。 – 9000

答えて

0

get_pty = Trueを使用してみましたか?

stdin,stdout,stderr = ssh.exec_command("sudo su; whoami", get_pty=True)