Làm cách nào để thêm máy chủ SSH được biết đến trong tập lệnh bash?


13

Tôi đang tạo một tập lệnh bash để cung cấp một máy chủ mới mà tôi có thể triển khai một ứng dụng web. Một điều tôi luôn phải làm là GitHub như một máy chủ được biết đến bằng cách sử dụng ssh git@github.com. Làm cách nào tôi có thể tự động hóa quy trình này trong tập lệnh bash và thực hiện theo cách không cần thiết?

Câu trả lời:


17

Cách đơn giản để đi là làm một cái gì đó như thế này.

ssh-keyscan remote_server >>~/.ssh/known_hosts

Nếu hộp này là hoàn toàn mới, bạn cũng có thể cần phải tạo ~/.sshthư mục trước khi chạy ssh-keyscan .

Hãy nhớ rằng ssh-keyscan có thể lấy số lượng tên máy chủ tùy ý. Nó sẽ nhận được tất cả các phím nó có thể.


1
Tái bút - Để cung cấp, bạn nên sử dụng một cái gì đó như con rối thay vì tập lệnh bash. Đối với con rối, điều này có thể được xử lý dễ dàng với tài nguyên sshkey . Ngoài ra, hãy xem câu hỏi này để biết phương pháp quản lý máy chủ en_ masse serverfault.com/a/416782/984
Zoredache

2
Điều đó chắc chắn nghe có vẻ tốt với tôi, nhưng sau khi dành vài giờ xin lỗi về con rối và các đối thủ cạnh tranh, tôi đã quay lại với các kịch bản bash và sự tỉnh táo. Nếu những công cụ đó là trực quan, rõ ràng tôi không có trực giác. YMMV.
Ron Burk

Sử dụng bash. Tôi liên tục gặp phải các vấn đề trên các phiên bản khác nhau của những thứ như con rối hoặc vô hình. Chúng tôi luôn quay trở lại bash ... 3 công ty đang hoạt động như thế này và bash luôn đáng tin cậy đối với chúng tôi.
Ligemer

4

Bạn đang cố gắng tự động hóa việc chấp nhận khóa mới? Nếu vậy, bạn có thể sử dụng -oStricthostKeyChecking = no.
Làm như vậy là một ý tưởng rất tồi tệ vì giờ đây bạn hoàn toàn rộng mở với các cuộc tấn công trung gian.

Tùy chọn tốt hơn sẽ chỉ là quản lý tệp đã biết và sử dụng lại tệp đó khi bạn cung cấp máy chủ mới. Dán nó trên github và viết một tập lệnh đơn giản để tải xuống tệp đó trước khi sshing vào github.

Việc kiểm tra khóa máy chủ nghiêm ngặt là một điều tốt.


Bạn có thể giải thích về "quản lý tập tin đã biết" không? Tôi nghĩ đó là những gì tôi muốn làm, nhưng khi tôi xem tệp, nội dung của nó trông giống như một loại băm / khóa và trông không giống như thứ gì đó được dự định quản lý thủ công.
Andrew

2
Cung cấp một máy chủ mới, ssh thủ công vào github như bạn muốn. Chấp nhận khóa máy chủ khi được nhắc. Đăng xuất. Sao chép ~ / .ssh / know_hosts từ máy chủ mới được cung cấp ở nơi khác (github, máy chủ web, không quan trọng miễn là bạn có thể lấy nó). Lần tới khi bạn cung cấp một máy chủ, hãy sao chép tệp đó lại trước khi sshing vào github. Bạn không cần phải chỉnh sửa tập tin.
yoonix

Điều này tốt hơn câu trả lời của tôi (an toàn hơn). Một cải tiến hơn nữa về câu trả lời của yoonix là phân tích 'ssh-keyscan github.com' và lưu trữ khóa được trả lại vào ~ / .ssh / know_host theo cách mà nó không tĩnh trong một tệp nào đó để bạn cần cập nhật.
Sirex

Điều đó cũng sẽ làm việc, nhưng tôi sẽ không xem xét nó tốt hơn. Bạn có khả năng tự thiết lập một cuộc tấn công trung gian nếu bạn đang lấy một khóa máy chủ mới mỗi lần.
yoonix

1
Để làm rõ nhận xét cuối cùng của tôi (quá muộn để chỉnh sửa): Lấy khóa máy chủ mới mỗi lần bạn cung cấp máy chủ có chức năng không khác gì cài đặt StricthostKeyChecking = no. Với một trong hai bạn, bạn tin tưởng một cách mù quáng bất cứ khóa nào được gửi mỗi khi bạn cung cấp. Nếu bạn nghĩ rằng một cuộc tấn công MITM là khó xảy ra, đọc những hai bài viết. Github sẽ là một mục tiêu lớn.
yoonix

1

Tôi không chắc là tôi hiểu câu hỏi, nhưng tôi nghĩ rằng bạn muốn bỏ qua lời nhắc đã biết hoặc tránh hoàn toàn, trong trường hợp này:

ssh -o StricthostKeyChecking = không

hoặc các đề xuất khác tại: http://www.joedog.org/2012/07/ssh-disable- Unknown_hosts-prompt /


Tôi muốn một cách không tương tác để chấp nhận khóa máy chủ GitHub (vì điều này sẽ xảy ra trong tập lệnh bash).
Andrew

sau đó nó sẽ hoạt động - mặc dù vậy nó sẽ không chấp nhận khóa, nó sẽ hoàn toàn bỏ qua nó. Câu trả lời của Yoonix tốt hơn
Sirex
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.