2013-07-15 19 views
5

Başka bir makineye ssh olduğum için paramiko ssh oturumumun makineye elle ssh yaptığım gibi aynı sistemi görmediği bir sorunla karşılaşıyorum.python paramiko ssh oturumu sistem yolunu almıyor

cmd = "echo $PATH" 
try: 
    ssh.connect(ip, username=username, password=password) 
except Exception as ex: 
    raise Exception("Failed to connect to %s with credentials username='%s' password='%s' %s" \ 
      % (ip, username, password, ex.message)) 

ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command(cmd) 
output = ssh_stdout.read() 

çıkış göstermek/usr/bin: İşte benim piton kodu/bin ama elle makineye ssh zaman, sistem PATH üzerinde birkaç diğer yolları vardır. Lütfen yardım edin.

cevap

5

exec_command() öğesini kullandığınızda, herhangi bir bashrc veya profil komut dosyası kaynaklandığını düşünmüyorum. Belki aşağıdakileri deneyin:

stdin, stdout, stderr = ssh.exec_command("bash -lc 'echo $PATH'") 
my_path = stdout.read().rstrip() 

sorun PATH içinde normalde var bir komutu çalıştırmak için çalıştıklarını, ancak ise siz) (exec_command kullandığınızda değil, komutunu çağırarak muhtemelen daha çok işinize onun mutlak yolu ile (normalde ne olduğunu öğrenmek için diğer makineye giriş yaptığınızda "[komut]" komutunu çalıştırın.

3

Komutunuzu çalıştırmadan önce bash_profile dosyasını yüklemeniz daha iyi olur. Aksi halde 'komut bulunamadı' istisnası olabilir.

Mesela ben

Sonra . ~/.profile; .~/.bash_profile; yazarak o damping komutundan önce elle bash_profile yüklemek zorunda MySQL tabloya damping amacıyla komutunu command = 'mysqldump -uu -pp -h1.1.1.1 -P999 table > table.sql' yazın.

Örnek

my_command = 'mysqldump -uu -pp -h1.1.1.1 -P999 table > table.sql;' 

pre_command = """ 
. ~/.profile; 
. ~/.bash_profile; 
""" 

command = pre_command + my_command 

stdin, stdout, stderr = ssh.exec_command(command) 
İlgili konular