2015-02-09 18 views

Trả lời

24

Chắc chắn, có một số cách để thực hiện!

Giả sử bạn có Raspberry Pi trên máy chủ raspberry.lan và tên người dùng của bạn là irfan.

quy trình con

Thư viện Python mặc định chạy lệnh.
Bạn có thể làm cho nó chạy ssh và làm bất cứ điều gì bạn cần trên một máy chủ từ xa.

scrat has it covered in his answer. Bạn chắc chắn nên làm điều này nếu bạn không muốn sử dụng bất kỳ thư viện của bên thứ ba nào.

Bạn cũng có thể tự động hóa mật khẩu/cụm mật khẩu nhập bằng cách sử dụng pexpect.

paramiko

paramiko là một thư viện của bên thứ ba mà bổ sung hỗ trợ SSH-giao thức, vì vậy nó có thể làm việc như một SSH-client.

Ví dụ mã mà sẽ kết nối đến máy chủ, thực hiện và lấy kết quả của lệnh ls -l sẽ trông như thế:

import paramiko 

client = paramiko.SSHClient() 
client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
client.connect('raspberry.lan', username='irfan', password='my_strong_password') 

stdin, stdout, stderr = client.exec_command('ls -l') 

for line in stdout: 
    print line.strip('\n') 

client.close() 

vải

Bạn cũng có thể đạt được nó bằng cách sử fabric.
Vải là công cụ triển khai thực thi các lệnh khác nhau trên máy chủ từ xa.

Nó thường được sử dụng để chạy nội dung trên máy chủ từ xa, do đó bạn có thể dễ dàng đặt phiên bản mới nhất của ứng dụng web, khởi động lại máy chủ web và không có lệnh nào. Trên thực tế, bạn có thể chạy cùng một lệnh trên nhiều máy chủ, điều này thật tuyệt vời!

Mặc dù nó đã được thực hiện như một công cụ quản lý và triển khai từ xa, bạn vẫn có thể sử dụng nó để thực thi các lệnh cơ bản.

# fabfile.py 
from fabric.api import * 

def list_files(): 
    with cd('/'): # change the directory to '/' 
     result = run('ls -l') # run a 'ls -l' command 
     # you can do something with the result here, 
     # though it will still be displayed in fabric itself. 

Nó giống như gõ cd /ls -l trong máy chủ từ xa, do đó bạn sẽ nhận được danh sách các thư mục trong thư mục gốc của bạn.

Sau đó chạy trong vỏ:

fab list_files 

Nó sẽ nhắc nhở cho một địa chỉ máy chủ:

No hosts found. Please specify (single) host string for connection: [email protected] 

Một lưu ý nhanh chóng: Bạn cũng có thể gán tên người dùng và một loạt ngay trong một lệnh fab:

fab list_files -U irfan -H raspberry.lan 

Hoặc bạn có thể đặt máy chủ lưu trữ vào biến số env.hosts trong fabfile của bạn. Here's how to do it.


Sau đó, bạn sẽ được nhắc nhập một mật khẩu SSH:

[[email protected]] run: ls -l 
[[email protected]] Login password for 'irfan': 

Và sau đó lệnh sẽ được chạy thành công.

[[email protected]] out: total 84 
[[email protected]] out: drwxr-xr-x 2 root root 4096 Feb 9 05:54 bin 
[[email protected]] out: drwxr-xr-x 3 root root 4096 Dec 19 08:19 boot 
... 
+0

làm cách nào để cài đặt nó –

+2

@ IrfanGhaffar7 bạn có thể cài đặt thư viện Python của bên thứ ba bằng cách sử dụng 'pip' hoặc' easy_install'. Vì vậy, nó sẽ là 'pip install fabric'. Kiểm tra tài liệu (tôi liên kết với cả vải và tài liệu paramiko), nó có quickstarts và hướng dẫn! –

+0

tên máy chủ từ xa của tôi là 'Pi @ 192.168.2.34' và mật khẩu là 'raspberrypi'. Làm thế nào để tôi đề cập đến những thông tin trên Fabric – Fahadkalis

6

đơn giản ví dụ từ here:

import subprocess 
import sys 

HOST="www.example.org" 
# Ports are handled in ~/.ssh/config since we use OpenSSH 
COMMAND="uname -a" 

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND], 
         shell=False, 
         stdout=subprocess.PIPE, 
         stderr=subprocess.PIPE) 
result = ssh.stdout.readlines() 
if result == []: 
    error = ssh.stderr.readlines() 
    print >>sys.stderr, "ERROR: %s" % error 
else: 
    print result 

Nó thực hiện chính xác những gì bạn muốn: kết nối qua ssh, thực hiện lệnh, trả về đầu ra. Không cần thư viện của bên thứ ba.

+0

khi tôi sử dụng COMMAND này = "ls -l", kết quả của nó là trong một dòng, có nghĩa là không thể đọc được nhưng nó đang làm việc –

+1

@ IrfanGhaffar7 đó là vì 'result' là một danh sách, không phải là một chuỗi. Bạn có thể làm 'in '' .join (kết quả)' thay vào đó để làm cho nó có thể đọc được. –

+0

Cảm ơn .... nó là ok bây giờ –

Các vấn đề liên quan