2013-08-21 17 views
9

Tôi đang viết một tập lệnh bằng Python yêu cầu kết nối với một số remote_server bằng SSH và di chuyển file từ remote_server đến host_server. Tôi cần phải làm điều đó mà không cần mật khẩu vì nó cần làm việc cho bất kỳ máy chủ từ xa nào và bất kỳ người dùng máy chủ lưu trữ nào.Làm thế nào để kết nối với máy chủ từ xa với paramiko mà không cần mật khẩu?

Mã của tôi:

#get IP and username for remote access 
IP = input("Enter host_server IP: ").split() 
username = input("Enter username: ").split() 
#password = ??????? 

#create a file on host_server for file 
file_a = open(date+"file.txt", "a") #ignore the date variable 
file = str(date+"file.txt") 

#move file to host_server 
import paramiko 
ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect(IP[0], username = user[0], password = password[0]) 
print "Connected to server." 
transfer = ssh.open_sftp() 
transfer.get("file.txt", file) 
transfer.close() 
print "Transfer completed." 

Câu hỏi: Có cách nào để thiết lập một khóa công khai trong kịch bản mà không cần truy cập vào một thiết bị đầu cuối dòng lệnh, do đó mỗi lần kịch bản chạy nó sẽ thiết lập mật mã truy cập bằng SSH?

Trả lời

15

ssh.connect() lấy đối số từ khóa pkey mà bạn có thể sử dụng để chỉ định tệp riêng tư của mình.

#get IP and username for remote access 
IP = input("Enter host_server IP: ").split() 
username = input("Enter username: ").split() 


#create a file on host_server for file 
file_a = open(date+"file.txt", "a") #ignore the date variable 
file = str(date+"file.txt") 
import paramiko 
import os 
privatekeyfile = os.path.expanduser('~/.ssh/id_rsa') 
mykey = paramiko.RSAKey.from_private_key_file(privatekeyfile) 
ssh.connect(IP[0], username = user[0], pkey = mykey)