Tôi muốn tái tạo cách thức Vagrant ghi vào VM của tôi trong tập lệnh shell bằng ssh
lệnh, vì vậy tôi tạo một bí danh cho cá thể Vagrant của mình.
Cú pháp lệnh để sử dụng ssh
lệnh thông thường để truy cập nó là gì?
vagrant ssh-config
.
Tôi muốn tái tạo cách thức Vagrant ghi vào VM của tôi trong tập lệnh shell bằng ssh
lệnh, vì vậy tôi tạo một bí danh cho cá thể Vagrant của mình.
Cú pháp lệnh để sử dụng ssh
lệnh thông thường để truy cập nó là gì?
vagrant ssh-config
.
Câu trả lời:
Tôi đã phải triển khai lại "ssh vagrant" vì -c
tùy chọn này không truyền đúng đối số. Đây là cơ bản những gì nó làm (có thể có nhiều hơn, nhưng nó hoạt động tốt theo cách này)
#!/bin/sh
PORT=$(vagrant ssh-config | grep Port | grep -o '[0-9]\+')
ssh -q \
-o UserKnownHostsFile=/dev/null \
-o StrictHostKeyChecking=no \
-i ~/.vagrant.d/insecure_private_key \
vagrant@localhost \
-p $PORT \
"$@"
Là một lớp lót (nhờ có kgadek):
ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
Để tính toán khi bạn có nhiều hơn một máy chủ lưu trữ, điều này sẽ chọn máy chủ mong muốn, cũng như loại bỏ các dòng trống từ cấu hình (sử dụng sed):
HOST=name-of-my-host
ssh $(vagrant ssh-config $HOST | sed '/^[[:space:]]*$/d' | awk 'NR>1 {print " -o "$1"="$2}') localhost
ssh
đến Vagrant từ bên ngoài Vagrantfile
thư mục ("sử dụng ssh
lệnh thông thường "), đó là cách tôi diễn giải câu hỏi.
auto_correct: true
thiết lập. Dưới đây là thông tin thêm về cách thay đổi thủ công
Host
mục. Lệnh được sửa đổi là:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
Đã có rất nhiều câu trả lời, nhưng tất cả chúng đều có vẻ quá phức tạp hoặc giải quyết vấn đề mà người hỏi không có.
đơn giản:
# save the config to a file
vagrant ssh-config > vagrant-ssh
# run ssh with the file.
ssh -F vagrant-ssh default
vagrant-ssh
tập tin vào .gitignore
.
zsh
), một lớp lót sau hoạt động:ssh -F =(vagrant ssh-config) default
-F
không đơn giản
~/.ssh/config
vào theo cách @adamczi gợi ý, sau đó bạn có thể sử dụng Visual Studio Code Remote - tiện ích mở rộng SSH để ssh vào Vagrant VM và chỉnh sửa các tệp và thực hiện phát triển từ xa. Đơn giản chỉ cần CMD-SHIFT-P sau đó "Remote-SSH: Kết nối với máy chủ ..." và mục nhập ssh .config bạn vừa thêm sẽ tự động được liệt kê - bạn chỉ cần chọn nó và voila, vscode kết nối với vm mơ hồ từ xa của bạn! Nếu không có cách tiếp cận cấu hình, tôi không chắc mình sẽ làm thế nào với vscode.
Trong thiết bị đầu cuối chạy
vagrant ssh
Trong một cửa sổ thiết bị đầu cuối / tab chạy
ps aux | grep ssh
Ở đó bạn sẽ thấy lệnh thực tế được thực hiện bởi Vagrant, đại loại như thế này:
ssh vagrant@127.0.0.1 -p 2222 -o Compression=yes -o DSAAuthentication=yes -o LogLevel=FATAL -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -i ~/.vagrant.d/less_insecure_private_key -o ForwardAgent=yes
Chỉ cần chuyển toàn bộ vagrant ssh-config
dưới dạng tệp cấu hình ssh
với -F configfile
tham số. Bí danh máy chủ để kết nối được xác định trên dòng đầu tiên trong vagrant ssh-config
; Host default
có nghĩa là bạn có thể kết nối với ssh default
.
Tôi không thể thấy tùy chọn để đọc tệp cấu hình từ đầu vào tiêu chuẩn, do đó, đã đi với tuyến tệp tạm thời. Đây là một lớp lót cũng dọn sạch $TMPDIR.vagrant-ssh-config
tệp tạm thời sau đó. Nó cần phải được thực thi trong cùng thư mục với bạn Vagrantfile
, giả sử hộp mơ hồ của bạn đang hoạt động.
vagrant ssh-config > $TMPDIR.vagrant-ssh-config && ssh default -F $TMPDIR.vagrant-ssh-config ; rm $TMPDIR.vagrant-ssh-config
Lưu ý: trên hệ thống Mac OSX của tôi, $TMPDIR
mở rộng sang /var/folders/46/yltlhtgx8m5cg68_w95wgvy41324gn/T/
(ngay bây giờ). Sử dụng một biến khác hoặc thư mục khác, nếu nó không được đặt trên hệ thống của bạn.
ssh -F <(vagrant ssh-config)
zsh: thay thế quá trình zsh ssh -F =(vagrant ssh-config)
ssh -F
trong bash - mặc dù cách bạn đề cập nên hoạt động trong zsh.
Tôi đã giải quyết điều này một cách rất đơn giản: khi bạn khởi động hộp vagrant nó hiển thị địa chỉ ssh như thế này
SSH address: 127.0.0.1:2222
sau đó bạn có thể kết nối với hộp bằng cách sử dụng người dùng mơ hồ, máy chủ lưu trữ và cổng bạn nhận được
ssh vagrant@127.0.0.1 -p 2222
vagrant
Nếu bạn không cần sử dụng stdin với ssh
(ví dụ bạn muốn thực thi chỉ một lệnh và đăng xuất), bạn có thể sử dụng:
vagrant ssh-config --host default | ssh -F /dev/stdin default
Phương pháp này đã được đề xuất để trả lời một câu hỏi tương tự trên các nhóm google .
Thật không may, quá trình thay thế bash cũng không hoạt động (xem câu hỏi này trên unix.stackexchange để biết thêm chi tiết).
Các tùy chọn tốt nhất bạn có, nếu bạn muốn có một vỏ tương tác, là tạo một tệp tạm thời và sử dụng nó với ssh -F
hoặc sử dụng awk
theo đề xuất của các câu trả lời khác.
Nếu bạn chỉ muốn thiết lập nó để bạn có thể sử dụng dòng lệnh ssh bình thường, cũng như scp và như vậy, bạn có thể chạy vagrant ssh-config
và nối đầu ra vào cấu hình ssh mặc định của mình. Nếu bạn thay thế dòng "Máy chủ mặc định" bằng tên máy chủ mô tả nhiều hơn, bạn sẽ thấy ổn.
vagrant ssh-config |sed -e "s/Host default/Host my_cool_dev_box/" >> ~/.ssh/config
ssh my_cool_dev_box
Nếu bạn chỉ muốn lệnh tối thiểu để kết nối với hộp của mình, bạn cần biết cổng mà nó đang sử dụng (được in khi thực hiện vagrant up
hoặc hiển thị khi thực hiện vagrant ssh-config
) và khóa SSH riêng tư của bạn (cũng hiển thị khi thực hiện vagrant ssh-config
)
Sau đó, chỉ là vấn đề cung cấp khóa và cổng:
ssh -p 2222 -i $HOME/vagrantenv/.vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1
Rất nhiều câu trả lời khác cho rằng bạn đã cài đặt Vagrant.
Tôi đã cài đặt Vagrant trên Windows 10, nhưng tôi không thể vagrant ssh
vì tôi đang sử dụng PuTTy làm ứng dụng khách SSH, điều này không được chấp nhận.
Tệp
ssh
thực thi được tìm thấy trong PATH là máy khách SSH PuTTY Link. Vagrant chỉ tương thích với các máy khách SSH OpenSSH.
Tuy nhiên, trong Windows 10 chúng ta cũng có Bash trên Ubuntu trên Windows. Vì vậy, tôi chỉ sử dụng điều đó với lệnh sau:
ssh vagrant@127.0.0.1 -p2222 -i .vagrant/machines/default/virtualbox/private_key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o LogLevel=Fatal
Thật dễ dàng để cài đặt Vagrant trên Win10-Ubuntu nhưng nó cũng muốn bạn cài đặt Virtualbox vì một số lý do, điều mà tôi không muốn làm.
NB Tôi đã thử với ssh default -F vagrant-ssh-config
phương pháp, nhưng tôi chỉ nhận được
Quyền bị từ chối (khóa công khai, mật khẩu).
Tôi đoán điều này là do IdentityFile
đường dẫn là một đường dẫn Windows, trong khi ở Bash, nó nên bắt đầu bằng /mnt/c/
. Tôi cho rằng bạn chỉ có thể viết ra tập tin và sau đó sửa đổi nó nếu điều đó tốt hơn cho bạn.
Bạn có thể thêm cấu hình máy chủ mơ hồ vào cấu hình ssh cục bộ của bạn.
ssh-config mơ hồ >> ~ / .ssh / config
ssh vagrant @ {host}
Ví dụ. mèo ~ / .ssh / config
Host kmaster
HostName 127.0.0.1
User vagrant
Port 2222..
....
Có một cách sao chép cách người dùng từ xa có thể đăng nhập vào hệ thống
config.vm.network "private_network", ip: "192.168.33.10"
Điều này thêm một IP riêng cho máy chủ (biến nó thành những gì bạn muốn trong phạm vi 192.168 miễn là nó chưa được sử dụng
your_virtual_host_name.pem
Bạn sẽ tìm thấy khóa trong .vagrant \ Machines \ default \ virtualbox \ private_key
Chuyển đến thư mục nhà của bạn và làm ssh Unix thông thường của bạn, vì vậy
ssh -i your_virtual_hostname.pem username@192.168.33.10
trong đó tên người dùng, cũng có thể là mơ hồ nếu bạn có một hộp tiêu chuẩn, hãy nhìn vào đầu ra của ssh-config vagrant để biết chi tiết tiêu chuẩn ssh cho hộp.
Đó là nó
.vagrant
thư mục đều thuộc quyền sở hữu của root. Và quyền trên tệp là rw ------- vì vậy chỉ có root mới có quyền đọc tệp chính. Có lẽ điều này có thể hữu ích cho bất cứ ai.
Vagrant lưu trữ khóa riêng trong ~/.vagrant.d/insecure_private_key
và sử dụng nó để kết nối với mọi máy thông qua ssh
, xem xét rằng nó được cấu hình để kết nối trên cổng 2200 (mặc định) nó sẽ giống như:
ssh vagrant@localhost -p 2200 -i ~/.vagrant.d/insecure_private_key
Lưu ý: đảm bảo rằng khóa riêng được sở hữu bởi người dùng đang chạyVagrant
.
Mặc dù nếu mục đích của bạn là có một môi trường nhiều máy, bạn có thể sử dụng nó config.vm.define
.
Dưới đây là một ví dụ minh họa một môi trường với 2 máy, một máy được gọi web
và máy kia là databases
:
config.vm.define 'web', primary: true do |web|
web.vm.box = 'CentOS64'
web.vm.hostname = 'vic-develop'
web.vm.network 'private_network', ip: '192.168.50.10', virtualbox__intnet: true
web.vm.synced_folder '../code', '/var/www/project', :mount_options => ["dmode=777,fmode=777"]
web.vm.provision 'ansible' do |ansible|
ansible.playbook = 'development-web.yml'
ansible.sudo = true
end
end
config.vm.define 'databases' do |db|
db.vm.box = 'CentOS64'
db.vm.network 'private_network', ip: '192.168.50.20', virtualbox__intnet: true
db.vm.network :forwarded_port, guest: 3306, host: 8206
db.vm.provision 'ansible' do |ansible|
ansible.playbook = 'development-db.yml'
ansible.sudo = true
end
end
Sau đó, bạn sẽ có tất cả các lệnh Vagrant có sẵn trên mỗi máy, tức là vagrant ssh web
và vagrant provision databases
.
ssh vagrant@<host>
mật khẩu: vagrant
Ví dụ:
ssh vagrant@vagrant.local
hoặc sau khi kiểm tra IP (từ bên trong, sử dụng vagrant ssh
)ssh vagrant@172.28.128.3
Bạn có thể thêm cấu hình ssh cho máy chủ lưu trữ của bạn vào cấu hình ssh.
Nhận cấu hình ssh cho máy vagrant trong thư mục vagrant: vagrant ssh-config
Mở {UserDir}/.ssh/config
và nối kết quả từ lệnh trước đó. Lưu ý : dòng đầu tiên Host default
có nghĩa là bí danh mà bạn sẽ sử dụng sau này cho ssh
lệnh. Đặt tên nó là máy vagrant hoặc dir của bạn. Nếu bạn chỉ có một thư mục mơ hồ - bạn có thể đặt tên cho nóHost vagrant
Ssh để mơ hồ : ssh vagrant
. Tên cuối cùng là bí danh từ bước trước.
Bạn có thể lấy bất kỳ ssh-config
đối số nào và chuyển chúng sang ssh trên dòng lệnh dưới dạng -o Key=value
. Vì vậy, đối với thiết lập mơ hồ một máy chủ đơn giản (bạn có thể phải thực hiện thêm một chút công việc với grep
hoặc perl
cho thiết lập multihost), bạn có thể thực hiện một số thứ như sau (hoặc thay thế perl
bằng sed
nếu bạn muốn):
ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost
Env của tôi là Win7 + Centos. Câu trả lời với hầu hết các thỏa thuận không làm việc cho tôi. Sau khi thất bại sau khi thử ssh -p [port] [usrname]@127.0.01
, tôi chỉ sử dụng XShell để thêm một phiên mới với cổng người dùng và tên người dùng.
Nó hoạt động.
Có lẽ Xshell là một kẹo.