Sao chép khóa công khai ssh vào nhiều máy chủ Linux


14

Tôi đang cố gắng sao chép .ssh / id_rsa.pub từ máy chủ trung tâm của chúng tôi sang nhiều máy chủ. Tôi có đoạn script sau mà tôi thường sử dụng để đẩy các thay đổi đến các máy chủ khác nhau.

#!/bin/bash


for ip in $(<IPs); do
    # Tell the remote server to start bash, but since its
    # standard input is not a TTY it will start bash in
    # noninteractive mode.
    ssh -q "$ip" bash <<-'EOF'



EOF

done

Nhưng trong trường hợp này, tôi cần mã hóa khóa công khai trên máy chủ cục bộ và sau đó thêm nó vào nhiều máy chủ. Có cách nào bằng cách sử dụng tập lệnh tài liệu ở trên để thực hiện như sau.

cat .ssh/id_rsa.pub |ssh tony@0.0.0.0 'cat > .ssh/authorized_keys'

tại sao bạn cần phải mèo trên địa phương vì bạn đã sao chép từ một vị trí trung tâm để điều khiển từ xa?
klerk

Tôi cần thêm khóa công khai của máy chủ trung tâm do đó máy chủ cục bộ. Xin lỗi vì sự nhầm lẫn.
dùng67186

Câu trả lời:


20

Với vòng lặp đơn giản này, bạn có thể tự động hóa nó và lây lan sang tất cả các máy chủ từ xa.

#!/bin/bash
for ip in `cat /home/list_of_servers`; do
    ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
done

Xin chào, tôi chấp nhận anwser của bạn và nó hoạt động tốt. Cảm ơn
user67186 17/07/14

+1. Tôi là một fan hâm mộ lớn của phong cách viết kịch bản rất dễ hoàn thành công việc!
Laith Leo Alobaidy

4

Đây là kịch bản đơn giản của tôi để sao chép ssh-keygen vào nhiều máy chủ mà không cần hỏi mật khẩu mọi lúc.

for server in `cat server.txt`;  
do  
    sshpass -p "password" ssh-copy-id -i ~/.ssh/id_rsa.pub user@$server  
done

3

Câu trả lời được chấp nhận sẽ không hoạt động nếu một người cần đặt khóa chung của người khác cho nhiều máy. Vì vậy, tôi đã đưa ra giải pháp sau:

cat add-vassal-tc-agents.sh

#!/bin/bash
set -x # enable bash debug mode
if [ -s vassal-public-key.pub ]; then # if file exists and not empty
    for ip in `cat tc-agents-list.txt`; do # for each line from the file
        # add EOL to the end of the file and echo it into ssh, where it is added to the authorized_keys
        sed -e '$s/$/\n/' -s vassal-public-key.pub | ssh $ip 'cat >> ~/.ssh/authorized_keys'
    done
else
    echo "Put new vassal public key into ./vassal-public-key.pub to add it to tc-agents-list.txt hosts"
fi

Tập lệnh này thêm khóa mới cho người dùng trong danh sách các máy, với điều kiện môi trường mà nó được chạy có quyền truy cập.

Ví dụ về tc-agents-list.txt:

root@10.10.0.1
root@10.10.0.2
root@10.10.0.3
root@10.10.0.4

2

Để sao chép khóa công khai của bạn, bạn có một cái gì đó được tích hợp sẵn trong openssh. Vì vậy, thay vì catsshsử dụng điều này: -

ssh-copy-id -i ~/.ssh/id_rsa.pub YOUR-REMOTE-HOST

Tôi muốn thực thi lệnh sao chép công khai của máy chủ trung tâm sang các máy chủ từ xa tồn tại trong tệp IP. Kịch bản lặp qua chúng. Vì vậy, ví dụ của bạn có thể không hữu ích ở đây. Cảm ơn
user67186

Không cần sử dụng tùy chọn -i nếu bạn đang sử dụng vị trí mặc định của khóa chung.
Laith Leo Alobaidy

0

Bạn có thể làm điều này với một danh sách máy chủ nhúng và vòng lặp đơn giản như thế này:

while read SERVER
do
    ssh-copy-id user@"${SERVER}"
done <<\EOF
server1
server2
server3
EOF

Có danh sách bên trong tập lệnh sẽ loại bỏ các tệp dữ liệu riêng biệt có thể bị đặt sai vị trí.


ssh-copy-idđã được đề xuất trong một số câu trả lời khác.
RalfFriedl

0

Giả sử bạn có một tệp với danh sách IP của máy chủ, đặt tên SERVER và chỉ địa chỉ IP của các máy chủ được xác định.

Điều này cho vòng lặp sẽ làm việc như là tốt.

for user in $(awk '{print $1}' SERVER | awk '{printf "user1@""%s"(NR==0?RS:"\n"), $1}' ) ;
do
        ssh-copy-id -f -i id_rsa_k2.pub $user
done
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.