sshでサーバにログインする必要があります。su username(パスワードなし)を実行して、そのユーザ(sshで直接ログインしていないコマンド)を実行します。私はparamiko(パイソン)でこれを行うにしようとしましたparamiko ssh接続でsu user(パスワードなし)を実行
[email protected]:~# su foo
[email protected]:/root$ cd
[email protected]:~$ ls
:端末から
が、このようなものになるだろう
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('host', username='root', password='mypassword', key_filename='<filename>')
stdin, stdout, stderr = ssh.exec_command('su foo')
print stdout.readlines()
stdin, stdout, stderr = ssh.exec_command('cd')
print stdout.readlines()
stdin, stdout, stderr = ssh.exec_command('pwd')
print stdout.readlines()
ssh.close()
しかし、スクリプトが終了していません。
ログはこれらです:
...
DEB [20111207-16:22:25.538] thr=1 paramiko.transport: userauth is OK
INF [20111207-16:22:25.921] thr=1 paramiko.transport: Authentication (publickey) successful!
DEB [20111207-16:22:25.923] thr=2 paramiko.transport: [chan 1] Max packet in: 34816 bytes
DEB [20111207-16:22:26.088] thr=1 paramiko.transport: [chan 1] Max packet out: 32768 bytes
INF [20111207-16:22:26.088] thr=1 paramiko.transport: Secsh channel 1 opened.
DEB [20111207-16:22:26.151] thr=1 paramiko.transport: [chan 1] Sesch channel 1 request ok
は、私はこれだけをしようとした場合:
stdin, stdout, stderr = ssh.exec_command('su foo')
#without print
stdin, stdout, stderr = ssh.exec_command('pwd')
print stdout.readlines()
はそれがないFOOとして、rootとしてPWDを実行します。
どういうところが間違っていますか?
thx。私の目標は、suユーザーを呼び出してからcd(自分の家に行く)、そしてsvnをそのディレクトリに置くことです。これを連結する方法、またはparamikoの状態を変更する方法がありますか? – apelliciari
'su foo -c" svn up/home/foo "'が可能です。これは最初にコマンドラインでスクリプトを実行します。これはparamikoとは関係ありません。 paramikoでは「状態を維持できない」というわけではなく、2つの独立したシェルを実行しているということです。 – JimB