Sao chép khóa ssh của tôi vào máy từ xa thông qua ssh-copy-id trong tập lệnh mà không cần nhắc?


5

Usecase của tôi là tôi cần sao chép khóa ssh của mình để truy cập được ủy quyền vào một máy từ xa. Tôi cần có thể gọi một tập lệnh sao chép khóa ssh của mình sang máy từ xa mà không cần đầu vào. Hiện tại nó nhắc nhập mật khẩu và đồng ý với dấu vân tay RSA. Tôi cần nó để có thể tự động thêm các máy chủ của mình với nhau thông qua một dải IP

Câu trả lời:


10

Tôi tin rằng bạn có thể sử dụng sshpass.

  • Ubuntu / Debian: apt-get install sshpass
  • Fedora / CentOS: yum install sshpass

Ví dụ:

sshpass -p "PASSWORD" ssh-copy-id -o StrictHostKeyChecking=no USERNAME@IP


1
Tôi đề nghị không lưu trữ mật khẩu trực tiếp trong tập lệnh, vì tập lệnh có thể vẫn còn trên máy với mật khẩu được mã hóa cứng. Điều này sẽ làm tăng vấn đề bảo mật hơn nữa. Vượt qua nó như một đối số đầu vào có thể tốt hơn
Slizzered

2
Tôi đồng ý với Slizzered về việc lưu trữ nó trên máy chủ. Nó nên là một đối số cho kịch bản. Điều đó đang được nói, nếu bạn truyền vào như một đối số, bạn vẫn có vấn đề về mật khẩu đó nằm trong các quy trình nền trong khi tập lệnh thực thi. Bất kể, nếu bạn bỏ qua các biện pháp bảo vệ ssh bằng cách sử dụng những thứ như 'sshpass', luôn có ý nghĩa bảo mật!
Rob Calistri

0

Đối với lời nhắc mật khẩu ssh, hãy thử sử dụng ansible/ansible-playbook -k/--ask-pass. Nó sẽ gọi sshpass (FYI, có lẽ OSX không giao hàng với sshpass ).

Để kiểm tra khóa máy chủ, thêm

[defaults]
host_key_checking = False

trong ~ / .ansible.cfg hoặc /etc/ansible/ansible.cfg.

Hoặc là export ANSIBLE_HOST_KEY_CHECKING=False chỉ như thế này hướng dẫn sử dụng nói.

Để triển khai khóa ssh, hãy sử dụng ủy quyền mô-đun trong playbook ansible. Người dùng dễ dàng hơn trong việc giữ nguyên các kịch bản.


0

Nếu bạn đồng ý nhập mật khẩu một lần, tập lệnh sau sẽ sao chép khóa ssh của bạn sang một số lượng lớn máy chủ (được liệt kê trong hosts.txt) rất nhanh mà không cần phải đặt mật khẩu của bạn vào dòng lệnh:

# sudo yum install moreutils sshpass openssh-clients
echo 'Input Password:';
read -s SSHPASS;
export SSHPASS;
parallel -i -j 25 sshpass -e ssh-copy-id '-o ConnectTimeout=10 -o StrictHostKeyChecking=no {}' -- `cat hosts.txt`;
export SSHPASS=''
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.