2011-08-26 29 views
14

Tôi đã chạy vm bằng cách sử dụng âm đạo và tôi đang cung cấp nó bằng Đầu bếp. Một trong những bước liên quan đến nhân bản một repo git, nhưng ssh-key của tôi (trên máy chủ của tôi) có một cụm từ mật khẩu trên đó.sử dụng các khóa ssh với cụm mật khẩu trên thiết lập đầu bếp vagrant +

Khi tôi chạy vagrant up, quá trình này thất bại ở bước git clone với các lỗi sau:
Permission denied (publickey). fatal: The remote end hung up unexpectedly
(Chìa khóa đã được thêm vào trên máy chủ, với các cụm từ mật khẩu)

tôi đã cố gắng để giải quyết việc này với đại lý ssh chuyển tiếp bằng cách làm như sau:
Added config.ssh.forward_agent = true đến VagrantFile
Added Defaults env_keep = "SSH_AUTH_SOCK-/etc/sudoers trên vm

Bây giờ, vagrant up vẫn không thành công khi nó đến phần bản sao git, nhưng nếu tôi chạy vagrant provision sau đó, nó sẽ chuyển. Tôi đoán điều này là do cấu hình ssh được thiết lập khi vm được khởi động và không được tải lại

Tôi đã cố gắng tải lại ssh sau khi điều chỉnh hai cài đặt đó, nhưng điều đó không giúp ích gì.

Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?

Cảm ơn.

Trả lời

10

Như bạn đã lưu ý, cập nhật sudoers trong quá trình chạy ban đầu là quá muộn để có lợi cho điều đó khi đầu bếp đang chạy dưới sudo vào thời điểm đó.

Thay vào đó tôi đã viết một công thức hacky tìm thấy ổ cắm ssh thích hợp để sử dụng và cập nhật môi trường SSH_AUTH_SOCK cho phù hợp. Nó cũng vô hiệu hóa việc kiểm tra khóa máy chủ nghiêm ngặt để kết nối ra ngoài ban đầu được tự động phê duyệt.

Lưu này như một công thức đó là thực hiện bất cứ lúc nào trước khi kết nối ssh đầu tiên (thử nghiệm với Ubuntu nhưng nên làm việc với các bản phân phối khác):

Directory "/root/.ssh" do 
    action :create 
    mode 0700 
end 

File "/root/.ssh/config" do 
    action :create 
    content "Host *\nStrictHostKeyChecking no" 
    mode 0600 
end 

ruby_block "Give root access to the forwarded ssh agent" do 
    block do 
    # find a parent process' ssh agent socket 
    agents = {} 
    ppid = Process.ppid 
    Dir.glob('/tmp/ssh*/agent*').each do |fn| 
     agents[fn.match(/agent\.(\d+)$/)[1]] = fn 
    end 
    while ppid != '1' 
     if (agent = agents[ppid]) 
     ENV['SSH_AUTH_SOCK'] = agent 
     break 
     end 
     File.open("/proc/#{ppid}/status", "r") do |file| 
     ppid = file.read().match(/PPid:\s+(\d+)/)[1] 
     end 
    end 
    # Uncomment to require that an ssh-agent be available 
    # fail "Could not find running ssh agent - Is config.ssh.forward_agent enabled in Vagrantfile?" unless ENV['SSH_AUTH_SOCK'] 
    end 
    action :create 
end 

Ngoài ra tạo một hộp với bản cập nhật sudoers đã có trong nó và cơ sở máy ảo trong tương lai của bạn tắt.

+0

cảm ơn điều này đã làm việc cho tôi! – Anentropic

+0

Tuyệt vời, hoạt động !!! –

+2

Đối với những người muốn làm điều tương tự trong bash: https://gist.github.com/bendavis78/5464209. Xem ở đây về cách thêm nội dung này vào Vagrantfile của bạn: http://docs-v1.vagrantup.com/v1/docs/provisioners/shell.html –

3

Đây có thể không phải là câu trả lời bạn đang tìm kiếm, nhưng dễ dàng khắc phục điều này là tạo khóa ssh triển khai chuyên dụng mà không có cụm mật khẩu. Tôi thích các khóa triển khai riêng biệt và chuyên dụng hơn là một khóa duy nhất cho nhiều ứng dụng.

2

Bạn có thể chạy nhiều bộ cấp phép với Vagrant (thậm chí cùng loại), mỗi bộ cấp phép được thực thi trên kết nối SSH của riêng nó. Tôi thường giải quyết vấn đề này bằng cách sử dụng trình cung cấp Shell để thêm Added Defaults env_keep = "SSH_AUTH_SOCK" vào /etc/sudoers trên vm.

Dưới đây là kịch bản Bash tôi sử dụng để làm việc đó:

#!/usr/bin/env bash 

# Ensure that SSH_AUTH_SOCK is kept 
if [ -n "$SSH_AUTH_SOCK" ]; then 
    echo "SSH_AUTH_SOCK is present" 
else 
    echo "SSH_AUTH_SOCK is not present, adding as env_keep to /etc/sudoers" 
    echo "Defaults env_keep+=\"SSH_AUTH_SOCK\"" >> "/etc/sudoers" 
fi 

tôi đã không kiểm tra này với Provisioner Chef, chỉ với provisioners Shell thêm ... nhưng từ những gì tôi hiểu được điều này nên làm việc tương tự cho trường hợp sử dụng của bạn.

0

Hầu hết các hộp cơ sở đều có khóa ssh mặc định/không an toàn, thật dễ dàng để bật passwordless ssh auth for vagrant nhưng chỉ nên được sử dụng để thử nghiệm.

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