Làm thế nào để hoàn tác một ssh-copy-id?


15

Tôi có một cụm hadoop 2 nút.

Tôi đã chạy lệnh này trên bản gốc:

$ssh-copy-id -i /home/hadoop/.ssh/id_rsa.pub hadoop@192.168.1.1

Làm thế nào tôi có thể hoàn tác điều này? Tôi thực sự muốn gán lại chìa khóa.

192.168.1.1 là nô lệ.

Câu trả lời:


20

Xác định khóa công khai mà bạn đã sao chép khi chạy ssh-copy-id:

cat ~/.ssh/id_rsa.pub

SSH đến máy chủ mà bạn đã sao chép khóa vào:

ssh hadoop@192.168.1.1

Chỉnh sửa các tập tin ~hadoop/.ssh/authorized_keystrên 192.168.1.1sử dụng biên tập ưa thích của bạn, và xóa các dòng có chứa chìa khóa của bạn.


1
Có cách nào để làm nó tự động hơn tại sao? Giống nhưssh-rm-id hadoop@192.168.1.1
SR

@SR Tôi không biết một lệnh duy nhất tự động hóa việc này. Về lý thuyết, bạn có thể tự động "tự động hóa" nó với một lớp lót nhỏ bằng cách sử dụng sshmột sedlệnh (hoặc tương tự) để chỉnh sửa ~/.ssh/authorized_keysvà xóa dòng. Xem superuser.com/questions/429954/ trộm
David Edwards

4

Nếu bạn đã làm ssh-copy-idnhư thế:

remote='user@machine'
ssh-copy-id -i $remote

Vì vậy, bạn có thể truy cập vào máy từ xa này mà không cần sử dụng mật khẩu:

ssh $remote

Để hoàn tác nó theo cách thức, bạn có thể viết kịch bản như:

idssh=`cat ~/.ssh/id_rsa.pub | awk '{print $2}'`
ssh $remote "sed -i '/$idssh/{d}' .ssh/authorized_keys"

Tôi sử dụng nó trong các tập lệnh tôi cần đến scpmột số tập tin, vì vậy tôi chỉ yêu cầu một lần cho mật khẩu.


1
Điều này có thể hơi nguy hiểm: bạn đang tham gia vào trường nhận xét của khóa. Nó là một chuỗi tùy ý mà không có bất kỳ ý nghĩa nào và có thể được chứa nhiều lần. Tôi sẽ grep cho AAA....==chuỗi dài (khóa thực tế) hoặc cho dòng hoàn chỉnh từ id_rsa.pub. Nhưng +1 để hiển thị cách tự động loại bỏ khóa.
PerlDuck

1
@PerlDuck bạn nói đúng. Sẽ tốt hơn nhiều nếu sử dụng chính khóa ($ 2) so với trường thứ ba. Cảm ơn bạn.
Javi M.

@Javi M. Tôi gặp phải một vấn đề khác. Dấu gạch chéo được sử dụng theo mặc định là dấu phân cách trong sed nằm trong khóa chung của tôi. Kết quả là, tôi thấy tốt nhất nên sử dụng dấu chấm phẩy làm dấu phân cách sed vì nó dường như không hiển thị trong khóa công khai. Để làm điều này, trước tiên cần phải thoát khỏi nhân vật. Tôi đã kết thúc với một cái gì đó như thế này:ssh $remote "sed -i '\;$idssh;{d}' .ssh/authorized_keys"
ccalvert

Dưới đây là một số thông tin về các ký tự có thể kết thúc trong khóa chung.
ccalvert
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.