Làm thế nào để ssh đi lang thang mà không thực sự chạy Sò âm đạo?


149

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 sshlệ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 sshlệnh thông thường để truy cập nó là gì?


Bạn đang hỏi cái gì vậy, tôi thấy ba điều khác nhau đang được hỏi, có lẽ bạn có thể mở rộng câu hỏi sau đó gắn cờ để di chuyển. Cảm ơn.
Kev

3
Theo mặc định, cổng ssh của VM là -22 sẽ được chuyển tiếp đến 2222 trên máy chủ. Tôi putty-ed trên 127.0.0.1 và cổng 2222 với SSH và nó đã hoạt động!
Vishal Biyani

8
Nếu bạn đang chạy nhiều hộp, số cổng đó sẽ tự động thay đổi. Bạn có thể có được một cái đúng bằng cách chạy vagrant ssh-config.
Stefano Palazzo

Câu trả lời:


108

Tôi đã phải triển khai lại "ssh vagrant" vì -ctù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

3
Câu trả lời này không cho phép bạn sshđến Vagrant từ bên ngoài Vagrantfilethư mục ("sử dụng sshlệnh thông thường "), đó là cách tôi diễn giải câu hỏi.
sjy

Bạn có thể tự thiết lập cổng. Do đó, kịch bản sẽ được thực thi từ bất kỳ thư mục.
Yser

Vì vậy, điều gì làm cho cổng đó trở thành một cách để vào máy? Cấu hình của cổng đó ở đâu?
nroose

1
Vagrant chọn một không sử dụng với các auto_correct: truethiết lập. Dưới đây là thông tin thêm về cách thay đổi thủ công
Stefano Palazzo

1
Tôi đã phải bỏ qua dòng đầu tiên, tức là. các Hostmục. Lệnh được sửa đổi là:ssh $(vagrant ssh-config | awk 'NR>1 {print " -o "$1"="$2}') localhost
kgadek

148

Đã 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

2
Thật là tuyệt vời. Tâm thêm vagrant-sshtập tin vào .gitignore.
sashaegorov

5
Với một số vỏ (ví dụ zsh), một lớp lót sau hoạt động:ssh -F =(vagrant ssh-config) default
liori

4
Bạn có thể muốn lặp lại kết quả này vào sshtệp cấu hình của mình : vagrant ssh-config >> ~/.ssh/configvì vậy bạn chỉ cần chạy ssh defaulttừ bất kỳ đâu trong hệ thống của mình, defaulttên của VM mà bạn có thể chỉ định như ở đây
adamczi

Cảm ơn @adamczi, đây là cách đơn giản hóa cũng hoạt động cho các giải pháp tự động trong đó việc thêm tham số ssh -Fkhông đơn giản
laimison

3
Bằng cách thêm một mục ~/.ssh/configvà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.
abulka

52

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

Thủ thuật tuyệt vời nếu bạn cần máy chủ lưu trữ của bạn cho ssh vì các lý do khác, như kết nối GUI SQL, chẳng hạn như Sequel Pro. Cái này cứu tôi với!
Atomox

19

Chỉ cần chuyển toàn bộ vagrant ssh-configdưới dạng tệp cấu hình sshvới -F configfiletham 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 defaultcó 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-configtệ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, $TMPDIRmở 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.


3
Nếu bạn đang sử dụng bash hoặc zsh, quá trình thay thế là một cách đơn giản hơn để chuyển đầu ra của một lệnh này sang lệnh khác. bash: ssh -F <(vagrant ssh-config) zsh: thay thế quá trình zsh ssh -F =(vagrant ssh-config)
myeeshen

@myshen: theo câu trả lời của @tyrion thay thế quá trình không hoạt động ssh -Ftrong bash - mặc dù cách bạn đề cập nên hoạt động trong zsh.
Joel Purra

Dang, tôi thực sự cần phải học cách sử dụng vagrant, không đề cập đến bash.
Spencer Williams

14

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

1
đẹp! và lưu ý rằng thông thường, mật khẩu cho người dùng mơ hồ làvagrant
Brad

7

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 -Fhoặc sử dụng awktheo đề xuất của các câu trả lời khác.


5

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-configvà 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

Chính xác là những gì bác sĩ đã ra lệnh ... Thx.
xenoid

4

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 uphoặ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


4

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 sshvì 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 sshthự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-configphươ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.


4

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.

  1. ssh-config mơ hồ >> ~ / .ssh / config

  2. ssh vagrant @ {host}

Ví dụ. mèo ~ / .ssh / config

Host kmaster
  HostName 127.0.0.1
  User vagrant
  Port 2222..
  ....
  • ssh vagrant @ kmaster

3

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

  1. Chỉnh sửa Vagrantfile cho ví dụ của bạn thêm vào

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

  1. Khởi động lại cá thể với tải lại vagrant từ dòng lệnh
  2. Sao chép tệp private_key vagrant sang một số Linux tương đương mà bạn nên chạy trên hộp của mình (ví dụ Cygwin nếu trên windows, tôi sử dụng windows 10) vào thư mục nhà Cygwin của bạn, đổi tên nó dọc theo một cái gì đó mô tả máy chủ lưu trữ khóa sẽ được sử dụng cho, vd

your_virtual_host_name.pem

  1. Bạn sẽ tìm thấy khóa trong .vagrant \ Machines \ default \ virtualbox \ private_key

  2. 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ó


Cảm ơn bạn, nhờ ý tưởng của bạn về việc sao chép tệp chính từ vagrant ở nơi khác tôi đã nhận ra vấn đề của mình - Tôi đã sử dụng nhà cung cấp libvirt trên Linux. Điều này rất quan trọng vì với nhà cung cấp libvirt, bạn cần khởi tạo vagrant bằng sudo và do đó tất cả các tệp trong .vagrantthư 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.
TomasH

2

Vagrant lưu trữ khóa riêng trong ~/.vagrant.d/insecure_private_keyvà 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 webvà 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 webvagrant provision databases.


Tôi có thể thay đổi cấu hình một máy thành cấu hình 2 máy không, nếu tôi biến máy cũ thành "chính"?
nroose

2

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


2

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.

  1. Nhận cấu hình ssh cho máy vagrant trong thư mục vagrant: vagrant ssh-config

  2. Mở {UserDir}/.ssh/configvà nối kết quả từ lệnh trước đó. Lưu ý : dòng đầu tiên Host defaultcó nghĩa là bí danh mà bạn sẽ sử dụng sau này cho sshlệ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

  3. Ssh để mơ hồ : ssh vagrant. Tên cuối cùng là bí danh từ bước trước.


1

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 grephoặc perlcho thiết lập multihost), bạn có thể thực hiện một số thứ như sau (hoặc thay thế perlbằng sednếu bạn muốn):

ssh `vagrant ssh-config | tail -8 | perl -pe 's/^\s+/-o@/; s/\s/\=/;s/@/ /;s/\n/ /'` vagrant@localhost

0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.