2017-03-19 1 views
1

ホストにsshするために使用されるサブプロセス。私のローカルマシンからlinuxホストにSSH、rootユーザーにsudo

ここでは、ユーザーとしてsshを実行してコマンドを実行するためのコードスニペットを示します。 (のようなもの)

sshProcess = subprocess.Popen(['ssh', hostname], stdin=subprocess.PIPE, stdout = subprocess.PIPE, universal_newlines=True, bufsize=0) 
sshProcess.stdin.write("hostname\n") 
sshProcess.stdin.write("ls -ldr %s \n"%path) 
sshProcess.stdin.write("pwd \n") 
sshProcess.stdin.close() 
for line in sshProcess.stdout: 
if line == "END\n": 
break 
print(line,end="") 

ないターミナルしかし、私は

sshProcess.stdin.write("sudo su - serviceuser \n") 

答えて

0

あなたが強制することができ、コマンドの下に実行することはできませんよ - 私はsudoコマンドを使用しようとすると、私はttyに関連したエラーが出ます-tオプションを指定して擬似tty割り当てを行います。 man ssh

-t  

Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t optionsforce tty allocation, even if ssh has no local tty.

+0

から

subprocess.Popen(['ssh -t', hostname], ..... 

私はエラー トレースバック(最新の呼び出しの最後)の下に取得しています以前にそれを試してみましたが、 を動作しませんでした:ライン、 ファイル "ssh.py" 11、in sshProcess = subprocess.Popen(['ssh -t'、hostname]、stdin = subprocess.PIPE、stdout = subprocess.PIPE、universal_newlines = True、bufsize = 0) ファイル "/ usr/lib/python2 .7/subprocess.py "、l伊根711、__init__ errread、errwrite) ファイル "/usr/lib/python2.7/subprocess.py" で、ライン1343、_execute_child レイズchild_exception OSErrorの中:私は追加[ERRNO 2]いいえそのようなファイルやディレクトリ – Springhills

+0

shell = PopenではTrueですが他のエラーが発生しています sshProcess = subprocess.Popen(['ssh -t'、hostname]、shell = True、stdin = subprocess.PIPE、stdout = subprocess.PIPE、universal_newlines = True、bufsize = 0) – Springhills

+0

使用法:ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-bバインドアドレス] [-c暗号_spec] [-D [bind_address:]ポート] [-E log_file] [-eエスケープ文字] [-F configfile] [-I [-L address] [-l login_name] [-m mac_spec][-j [user @] host [:port]] [-S ctl_cmd] [-oオプション] [-pオプション] [-q query_option] [-R address] [-S ctl_path] [-W host:port] [-w local_tun [:remote_tun]] [ user @] hostname [command] – Springhills

関連する問題