Câu hỏi ssh: tự động chấp nhận các phím


Tôi đã viết kịch bản tiện ích nhỏ này:

for h in $SERVER_LIST; do ssh $h "uptime"; done

Khi một máy chủ mới được thêm vào $SERVER_LIST, tập lệnh được dừng lại với:

The authenticity of host 'blah.blah.blah (10.10.10.10)' can't be established.
RSA key fingerprint is a4:d9:a4:d9:a4:d9a4:d9:a4:d9a4:d9a4:d9a4:d9a4:d9a4:d9.
Are you sure you want to continue connecting (yes/no)?

Tôi đã thử yes:

for h in $SERVER_LIST; do yes | ssh $h "uptime"; done

không may mắn.

Có cách nào để parametrize ssh để tự động chấp nhận bất kỳ khóa mới nào?


171
2018-04-18 09:11


gốc


Câu trả lời của Lekensteyn là tuyệt vời và chính xác, nhưng tôi chỉ muốn lưu ý rằng vì ssh đang chờ "có" và yes đầu ra "y", bạn có thể đã có may mắn hơn với for h in $SERVER_LIST; do yes yes | ssh $h "uptime"; done (lưu ý thêm có, cho biết có gì để nói thay vì "y"). - chazomaticus


Các câu trả lời:


Sử dụng tùy chọn StrictHostKeyChecking, ví dụ:

ssh -oStrictHostKeyChecking=no $h uptime

Tùy chọn này cũng có thể được thêm vào ~ / .ssh / config, ví dụ:

Host somehost
    Hostname 10.0.0.1
    StrictHostKeyChecking no

Lưu ý rằng khi các khóa máy chủ đã thay đổi, bạn sẽ nhận được cảnh báo, ngay cả với tùy chọn này:

$ ssh -oStrictHostKeyChecking=no somehost uptime
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
31:6f:2a:d5:76:c3:1e:74:f7:73:2f:96:16:12:e0:d8.
Please contact your system administrator.
Add correct host key in /home/peter/.ssh/known_hosts to get rid of this message.
Offending RSA key in /home/peter/.ssh/known_hosts:24
  remove with: ssh-keygen -f "/home/peter/.ssh/known_hosts" -R 10.0.0.1
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
ash: uptime: not found

Nếu máy chủ của bạn thường không được cài đặt lại, bạn có thể làm cho tính năng này kém an toàn hơn (nhưng thuận tiện hơn cho các khóa máy chủ thay đổi thường xuyên) với -oUserKnownHostsFile=/dev/null Tùy chọn. Điều này loại bỏ tất cả các khóa máy chủ nhận được vì vậy nó sẽ không bao giờ tạo ra cảnh báo.


Với 18.04, có một khả năng mới: StrictHostKeyChecking=accept-new. Từ man 5 ssh_config:

If this flag is set to “accept-new” then ssh will automatically
add new host keys to the user known hosts files, but will not
permit connections to hosts with changed host keys.  If this flag
is set to “no” or “off”, ssh will automatically add new host keys
to the user known hosts files and allow connections to hosts with
changed hostkeys to proceed, subject to some restrictions.

185
2018-04-18 09:29



Đây không phải là giải pháp tốt nhất vì nó bỏ qua các công cụ bảo mật tích hợp. ssh-keyscan là thích hợp hơn, nếu nó có sẵn trên hệ thống của bạn. - Stefan Lasiewski
@StefanLasiewski Nó cho phép người đàn ông trong các cuộc tấn công giữa nếu bạn đang trên các mạng không đáng tin cậy. Để chấp nhận khóa mới cho máy chủ cố định, ssh-keyscan cách tiếp cận là lành mạnh hơn. Đối với các máy ảo cục bộ và các máy chủ khác trong các mạng tin cậy với các địa chỉ IP động / tái sử dụng, cách tiếp cận được mô tả là đủ tốt. - Lekensteyn
Chỉ cần làm rõ sự khác biệt giữa hai giải pháp: ssh-keyscan giải pháp chỉ dễ bị tấn công bởi người đàn ông trung gian một lần ssh-keyscan đang được chạy. Các -oStrictHostKeyChecking=no giải pháp dễ bị tấn công ở giữa mỗi lần sshđang được chạy. - Erik Sjölund


Bạn có thể sử dụng lệnh sau để thêm dấu vân tay cho máy chủ vào known_host của bạn

ssh-keyscan -H <ip-address> >> ~/.ssh/known_hosts
ssh-keyscan -H <hostname> >> ~/.ssh/known_hosts

CHÚ THÍCH: Thay thế <ip-address> và <hostname> bằng tên IP và dns của máy chủ bạn muốn thêm vào.

Vấn đề duy nhất với điều này là bạn sẽ kết thúc với một số máy chủ trong known_host của bạn hai lần. Nó không thực sự là một vấn đề lớn, chỉ đề cập đến. Để đảm bảo không có bản sao, bạn có thể xóa tất cả các máy chủ trước bằng cách chạy phần sau trước:

ssh-keygen -R <ip-address>
ssh-keygen -R <hostname>

Vì vậy, bạn có thể chạy:

for h in $SERVER_LIST; do
    ip=$(dig +search +short $h)
    ssh-keygen -R $h
    ssh-keygen -R $ip
    ssh-keyscan -H $ip >> ~/.ssh/known_hosts
    ssh-keyscan -H $h >> ~/.ssh/known_hosts
done

Một điều cần ghi nhớ khi loại bỏ chỉ để thêm lại, bạn về cơ bản là loại bỏ sự an toàn của việc xác minh dấu vân tay. Vì vậy, bạn chắc chắn sẽ không muốn chạy tập lệnh này trước mỗi lần thực thi tập lệnh tiện ích của bạn.


96
2017-10-17 00:24



chạy nó thông qua loại | uniq và sau đó tìm kiếm máy chủ trùng lặp bằng awk sau sẽ làm cho tập lệnh có khả năng phát hiện các máy chủ thay đổi và cảnh báo người dùng chỉ về những máy chủ đó, vì cùng một máy chủ với các khóa khác nhau có thể gây ra sự cố - Lennart Rolland
Bạn có thể muốn thêm ghi chú -H băm tên máy chủ và địa chỉ. - David Cullen


Tôi hơi muộn với câu trả lời này, nhưng cách hợp lý là làm ssh-keyscan trên máy mới trước khi bạn chạy thu thập thời gian hoạt động.

ssh-keyscan  <newhost> >> ~/.ssh/known_hosts

Vô hiệu hóa tính năng kiểm tra độ chính xác cho âm thanh tiện lợi vì âm thanh như một kế hoạch tồi tệ, ngay cả khi bạn nghĩ mình hoàn toàn kiểm soát được môi trường.


23
2017-11-24 19:47



Đây thực sự là những gì tôi đang tìm kiếm. Cảm ơn. - user156516
chạy lệnh trên và không thực sự kiểm tra các khóa máy chủ đối với dấu vân tay bạn đã mua ngoài băng là dễ bị tổn thương theo cách giống hệt như StrictHostKeyChecking no - code_monk
@code_monk: không, không phải vậy. Tôi mở một một lần cơ hội cho sự thất bại (chấp nhận một chìa khóa từ một máy chủ sai được thêm vào máy chủ đã biết). StrictHostKeyChecking no sẽ cho phép lặp lại chấp nhận cho các máy khác. - tink


Để tự động thêm danh sách máy chủ, chúng tôi có thể thực hiện dưới đây:

Thêm máy chủ IP vào danh sách máy chủ tệp

Các IP phải được thêm vào dưới định dạng.

Đầu ra của cat servers-list

123.1.2.3
124.1.2.4
123.1.2.5

Thay đổi các IP trên bằng cách thay thế các IP của bạn.

Lệnh dưới đây sẽ thêm tất cả các máy chủ từ danh sách.

ssh-keyscan -p61 -H "`cat servers-list`" >> ~/.ssh/known_hosts

0
2018-02-16 07:46