Làm thế nào để tránh ssh xin phép?


58

Chúng tôi đang cố gắng tăng tốc độ cài đặt các nút oracle để cài đặt RAC. điều này đòi hỏi chúng ta phải cài đặt và cấu hình ssh để nó không nhắc mật khẩu.

Vấn đề là: Trong lần sử dụng đầu tiên, chúng tôi được nhắc

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

Có cách nào để tránh điều đó hay chúng ta sẽ phải kết nối ít nhất một lần trên mỗi máy chủ từ mọi máy chủ theo cách thủ công?

Câu trả lời:


91

Đặt StrictHostKeyChecking notrong /etc/ssh/ssh_configtệp của bạn , nơi nó sẽ là một tùy chọn toàn cầu được sử dụng bởi mọi người dùng trên máy chủ. Hoặc đặt nó trong ~/.ssh/configtệp của bạn , nơi nó sẽ là mặc định cho chỉ người dùng hiện tại. Hoặc bạn có thể sử dụng nó trên dòng lệnh:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

Đây là một lời giải thích về cách thức hoạt động của nó man ssh_config (hoặc xem phiên bản mới hơn này ):

StrictHostKeyChecking

      Nếu cờ này được đặt thành Có đúng, thì ssh sẽ không bao giờ tự động thêm khóa máy chủ vào $HOME/.ssh/known_hoststệp và từ chối kết nối với máy chủ có khóa máy chủ đã thay đổi. Điều này cung cấp sự bảo vệ tối đa chống lại các cuộc tấn công trojan ngựa, tuy nhiên, có thể gây khó chịu khi /etc/ssh/ssh_known_hoststệp được bảo trì kém hoặc các kết nối đến máy chủ mới thường được thực hiện. Tùy chọn này buộc người dùng phải tự thêm tất cả các máy chủ mới. Nếu cờ này được đặt thành Không có tên, sshsẽ tự động thêm các khóa máy chủ mới vào các tệp máy chủ được người dùng biết đến. Nếu cờ này được đặt thành Chế độ yêu cầu, các khóa máy chủ mới sẽ được thêm vào tệp máy chủ mà người dùng đã biết chỉ sau khi người dùng xác nhận đó là điều họ thực sự muốn và ssh sẽ từ chối kết nối với máy chủ có khóa máy chủ đã thay đổi . Các khóa máy chủ của các máy chủ đã biết sẽ được xác minh tự động trong mọi trường hợp. Đối số phải là tiếng vâng Mặc định là ăn hỏi.


1
+1, tôi cũng điều này cho các máy chủ của tôi. Và để rõ ràng, thông báo trong câu hỏi đến từ máy khách ssh trên máy khách kết nối chứ không phải từ máy chủ.
Patkos Csaba

3
Câu trả lời này có vẻ như là một vấn đề bảo mật trong quá trình thực hiện.
SunSparc

25

ssh-keyscan - Tập hợp các khóa công khai ssh

Nếu bạn đã biết danh sách các máy chủ bạn sẽ kết nối, bạn chỉ có thể đưa ra:

ssh-keyscan host1 host2 host3 host4

Bạn có thể cung cấp -Htùy chọn để nó băm kết quả như mặc định ssh cho đến bây giờ

Ngoài ra bạn có thể cho -t keytypekeytypedsa, rsahoặc ecdsanếu bạn có một sở thích như mà loại chìa khóa để lấy thay vì mặc định.

Khi bạn đã chạy, ssh-keyscannó sẽ được điền trước tệp lưu trữ đã biết của bạn và bạn sẽ không yêu cầu bạn cho phép thêm khóa mới.


1
Tôi hơi bối rối về nhận xét "sẽ được điền trước" ... đã biết_hosts không được tạo hoặc sửa đổi sau khi chạy này. Bạn có nghĩa là nội dung có thể được dẫn đến tập tin để điền nó?
rschwieb

4
Xác nhận với techrepublic.com/article/ trên . ssh-keyscan -H myhost >> ~/.ssh/known_hostshoặc cho toàn máy chủ,/etc/ssh/ssh_known_hosts
cole

12

Bạn có thể thêm dấu vân tay vào know_hosts của mỗi máy chủ. Đối với một người dùng:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts

3
Đây không còn là cách đúng đắn để làm điều đó kể từ khi băm được giới thiệu.
Deim0s

10

Bỏ qua máy chủ

Bỏ qua HostKeyChecking. Đối với điều này, tôi sử dụng, ví dụ:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net

Thêm máy chủ

Thêm dấu vân tay của máy chủ / máy chủ vào .ssh/known_hoststrước kết nối đầu tiên của bạn. Đây là cách an toàn hơn.


Chào. Oracle ban hành lệnh ssh vì vậy tôi không kiểm soát được cách thức thực hiện việc này.
Nicolas de Fontenay

Nâng cao. Hầu hết các câu trả lời tôi thấy đều bỏ lỡ việc đề cập đến việc hủy bỏ tập tin máy chủ đã biết. Điều này làm cho lệnh có thể sử dụng nhiều hơn và sẽ không làm hỏng bất kỳ cấu hình tồn tại nào.
Alex

(2) Chắc chắn, thêm dấu vân tay vào tệp máy chủ đã biết là cách tiếp cận lý tưởng - nhưng làm thế nào để thực hiện? (1) Tại sao có lợi khi đặt tệp máy chủ được người dùng biết đến  /dev/null? Sẽ không tốt hơn nếu bạn thực hiện ssh -oStrictHostKeyChecking=no user@example.netmột lần để lấy dấu vân tay của máy chủ vào $HOME/.ssh/known_hoststệp, vì vậy các kết nối tiếp theo sẽ tiếp tục mà không có yêu cầu xác nhận?
G-Man nói 'Phục hồi Monica'

3

Thực hiện đoạn mã sau trước khi thử.

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: Nghiêm cấm các máy chủ sản xuất, hãy cẩn thận với ManInMiddle


0

Tuy nhiên, tôi thích câu trả lời của Tim cho một thứ loại tắt, nếu đây là máy chủ bạn định kết nối thường xuyên, tôi sẽ tạo một mục trong ~ / .ssh / config của bạn (tạo tệp nếu tệp không tồn tại).

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
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.