Paramikoを使用して受信する永続的なエラーメッセージに関する上記の質問を投稿しました。次の質問とは関係ないと思いますが、そうかもしれません。
Paramikoを使用してSSH経由でサーバーに正常に接続できます。 lsやpwdなどのコマンドを実行できます。私ができないように見えるのは、ディレクトリを変更することです。たとえば、「cd ..」というコマンドを送信できますが、「pwd」でフォローアップすると、ディレクトリを変更していないことがわかります。ログインしたときの最初のディレクトリが表示されます。
>>> stdin, stdout, stderr = myssh.exec_command("pwd")
>>> stdout.readlines()
['/big/dom/home/myid\n']
>>> stdin, stdout, stderr = myssh.exec_command("cd ../")
>>> stdout.readlines()
[]
>>> stdin, stdout, stderr = myssh.exec_command("pwd")
>>> stdout.readlines()
['/big/dom/home/myid\n']
>>>
ここで何が起こっているのか誤解していますか?ディレクトリを変更できませんか?または、可能であれば、exec_commandを使用する以外の方法で行う必要がありますか?
この男はそれを理解しました: http://www.vertigrated.com/blog/2010/02/python-remote-ssh-with-paramiko/
次のような1つのexec_commandで複数のコマンドを送信する必要があります。
myssh.exec_command('cd ..; pwd')
次に、stdout.readlines()は、変更したディレクトリを返します。
バージョン2.6以降、SFTPClientを使用する場合、ディレクトリを変更するメソッドはsftp = myssh.open_sftp() sftp.chdir('path/to/directory')
です。
ParamikoはShellのインスタンスを作成し、paramikoで実行するすべてのコマンドはShellのそのインスタンスでのみ指定する必要があります。
例:私がいるディレクトリにフォルダがあるとします。
folder1
folder2
folder3
フォルダ1にcdしてディレクトリを作成したい場合は、次のようにします。
ssh.exec_command('cd folder1;mkdir folder4')
次のように書くと:
ssh.exec_command('cd folder1')
ssh.exec_command('mkdir folder4')
あなたは次のような結果を得るでしょう
folder1
folder2
folder3
folder4
これらはシェルの2つの異なるインスタンスであり、それらの機能は独立しています。
これには少し遅れますが、「invoke_Shell」してファイルを介して標準入力に書き込むことは可能です。
ご覧ください: https://stackoverflow.com/a/6203877/186135
';'。join(cmdlist)を実行してexec_commandに送信できるため、少し重いようです。