2013-03-29 45 views
8

Tôi đang cố gắng kết nối với một cửa sổ bằng cách sử dụng vải, nhưng mặc dù tôi định cấu hình con trỏ ssh để thực thi lệnh, nhưng vải vẫn yêu cầu mật khẩu.vải tiếp tục yêu cầu mật khẩu bằng cách sử dụng kết nối SSH

Đây là tập tin vải của tôi:

def azure1(): 
    env.hosts = ['host.cloudapp.net:60770'] 
    env.user = 'adminuser' 
    env.key_filename = './azure.key' 

def what_is_my_name(): 
    run('whoami') 

tôi chạy nó như:

fab -f fabfile.py azure1 what_is_my_name 

hoặc

fab -k -f fabfile.py -i azure.key -H [email protected]:60770 -p password what_is_my_name 

Nhưng không có gì làm việc, nó vẫn không ngừng yêu cầu người sử dụng mật khẩu mặc dù tôi nhập nó một cách chính xác.

Executing task 'what_is_my_name' 
run: whoami 
Login password for 'adminuser': 
Login password for 'adminuser': 
Login password for 'adminuser': 
Login password for 'adminuser': 

Nếu tôi cố gắng kết nối trực tiếp với ssh, nó hoạt động hoàn hảo.

ssh -i azure.key -p 60770 [email protected] 

Tôi đã thử các lời khuyên được đưa ra trong câu hỏi khác (q1q2q3) nhưng không hoạt động.

Bất kỳ ý tưởng nào tôi đang làm sai?

Cảm ơn bạn

Trả lời

6

Cuối cùng tôi thấy vấn đề là do thế hệ cặp khóa công khai.

Tôi đã làm theo các bước được cung cấp trong windows azure guide, có các khóa được tạo bằng cách sử dụng openssl, do đó quá trình này kết quả khóa công khai được lưu trữ trong tệp pem mà bạn phải tải lên phiên bản của bạn trong quá trình tạo.

Vấn đề là khóa riêng tư này thu được không được công nhận bởi paramiko, vì vậy vải sẽ không hoạt động. Nếu bạn cố gắng để mở một kết nối ssh sử dụng paramiko từ thông dịch viên python:

>>> import paramiko, os 
>>> paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) 
>>> ssh = paramiko.SSHClient() 
>>> ssh.load_host_keys('private_key_file.key') # private key file generated using openssl 
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
>>> ssh.connect("web1.cloudapp.net",port=56317) 

Cung cấp cho tôi những lỗi:

DEBUG:paramiko.transport:Trying SSH agent key a9d8dd41609191ebeedbe8df768ad8c9 
DEBUG:paramiko.transport:userauth is OK 
INFO:paramiko.transport:Authentication (publickey) failed. 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File ".. /paramiko/client.py", line 337, in connect 
    self._auth(username, password, pkey, key_filenames, allow_agent, look_for_keys) 
    File ".. /paramiko/client.py", line 528, in _auth 
    raise saved_exception 
paramiko.PasswordRequiredException: Private key file is encrypted 

Khi key file không được mã hóa.

Để giải quyết điều này, tôi đã tạo ra cặp khóa sử dụng openssh và sau đó chuyển đổi khóa công khai để PEM để tải nó lên xanh:

# Create key with openssh 
ssh-keygen -t rsa -b 2048 -f private_key_file.key 

# extract public key and store as x.509 pem format 
openssl req -x509 -days 365 -new -key private_key_file.key -out public_key_file.pem 

# upload public_key_file.pem file during instance creation 

# check connection to instance 
ssh -i private_key_file.key -p 63534 [email protected] 

này đã giải quyết được vấn đề.

4

Để kết nối ssh debug vải của, thêm những dòng này để fabfile của bạn:

import paramiko, os 
paramiko.common.logging.basicConfig(level=paramiko.common.DEBUG) 

này sẽ in tất cả các thông điệp debug paramiko của. Paramiko là thư viện ssh mà vải sử dụng.

Lưu ý rằng since Fabric 1.4 bạn phải đặc biệt cho phép sử dụng ssh config:

env.use_ssh_config = True 

(Lưu ý: Tôi khá chắc chắn hoàn toàn chắc chắn rằng fabfile tôi đã từng làm việc với Vải> 1.5 mà không có tùy chọn này, nhưng bây giờ tôi không nâng cấp lên 1,10).

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