Đây là những gì tôi đã thử và tôi đã gặp một lỗi:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Đây là những gì tôi đã thử và tôi đã gặp một lỗi:
$ cat /home/tim/.ssh/id_rsa.pub | ssh tim@just.some.other.server 'cat >> .ssh/authorized_keys'
Password:
cat: >>: No such file or directory
cat: .ssh/authorized_keys: No such file or directory
Câu trả lời:
OpenSSH đi kèm với một lệnh để làm điều này , ssh-copy-id
. Bạn chỉ cần cung cấp cho nó địa chỉ từ xa và nó thêm khóa công khai của bạn vào authorized_keys
tệp trên máy từ xa:
$ ssh-copy-id tim@just.some.other.server
Bạn có thể cần sử dụng -i
cờ để xác định khóa công khai trên máy cục bộ của mình:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub tim@just.some.other.server
>>
được xử lý bởi trình bao của bạn và bạn đang chạy lệnh thông qua SSH thay vì thông qua trình bao. Bản sửa lỗi của anh ta về việc SSH chạy shell, sau đó chạy lệnh của bạn, sẽ hoạt động
ssh-copy-id
sẽ không hoạt động, phải không?
Bạn luôn có thể làm một cái gì đó như thế này:
scp ~/.ssh/id_rsa.pub user@remote.example.com:/tmp/id_rsa.pub
ssh user@remote.example.com
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Tôi không chắc chắn nếu bạn có thể cat
từ một máy cục bộ vào một phiên ssh. Chỉ cần di chuyển nó đến / tmp như đề xuất.
Chỉnh sửa: Đây là chính xác những gì ssh-copy-id
làm. Đúng như Michael nói.
cat
hoặc nếu không). Những gì bạn đang mô tả là cách thức lỗi thời; ssh-copy-id
được khuyến nghị vì có ít rủi ro về lỗi chính tả hoặc cho phép các tệp sai.
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'
.
Câu trả lời này mô tả cách làm cho cách dự định được hiển thị trong câu hỏi hoạt động.
Bạn có thể thực thi một shell trên máy tính từ xa để diễn giải ý nghĩa đặc biệt của >>
toán tử chuyển hướng:
ssh tim@just.some.other.server sh -c "'cat >> .ssh/authorized_keys'" < /home/tim/.ssh/id_rsa.pub
Toán tử chuyển hướng >>
thường được giải thích bởi một vỏ.
Khi bạn thực thi ssh host 'command >> file'
thì nó không được đảm bảo command >> file
sẽ được diễn giải bằng shell. Trong trường hợp của bạn command >> file
được thực thi thay vì shell mà không có giải thích đặc biệt và >>
được trao cho lệnh dưới dạng đối số - giống như cách chạy command '>>' file
trong shell.
Một số phiên bản SSH (OpenSSH_5.9) sẽ tự động gọi shell trên máy chủ từ xa và truyền (các) lệnh cho nó khi chúng phát hiện các mã thông báo được giải thích bởi shell như ;
>
>>
v.v.
openssh
không cung cấp ssh-copy-id
. Trình tự sẽ là:
Tạo khóa 4k khá
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa4k
Bắt đầu đại lý ssh của bạn và hút thông tin như SSH_AGENT_PID
, vv
ssh-agent -s > ~/mysshagent
source ~/mysshagent
rm ~/mysshagent
Bây giờ hãy bắt đầu tải khóa vào Tác nhân SSH của bạn
ssh-add ~/.ssh/id_rsa4k
Kiểm tra xem nó đã được tải chưa
ssh-add -l
ssh-add -L
Điều này sẽ cho bạn thấy những gì bạn có trong ssh-agent
Bây giờ thực sự SSH đến một hệ thống từ xa
ssh username@remotehost.network
Bây giờ bạn có thể chạy ssh-copy-id mà không có đối số:
ssh-copy-id
Điều này tạo ~/.ssh/authorized_keys
và điền vào thông tin cơ bản được yêu cầu từ ssh-agent.
Tôi gặp rắc rối với ssh-copy-id khi chọn một cổng khác ngoài 22 ... vì vậy đây là oneliner của tôi với một cổng ssh khác (ví dụ 7572):
ssh yourServer.dom -p7572 "mkdir .ssh; chmod 700 .ssh; umask 177; sh -c 'cat >> .ssh/authorized_keys'" < .ssh/id_rsa.pub
Thật vậy , the ssh-copy-id
lệnh thực hiện chính xác điều này (từ openssh-client
gói):
ssh-copy-id user@host
Lưu ý: host
có nghĩa là địa chỉ IP hoặc tên miền .
Tôi cũng muốn thêm một số thông tin bổ sung vào đây
1) Chúng tôi có thể chỉ định một cổng khác cho SSH trên máy chủ đích:
ssh-copy-id "-p 8127 user@host"
Lưu ý:
Các cảng phải ở phía trước của user@host
hoặc nó sẽ không giải quyết được.
2) Chúng tôi có thể chỉ định một tệp có khóa chung :
ssh-copy-id -i ~/.ssh/id_rsa.pub user@host
Lưu ý:
Các -i
tùy chọn cho phép chúng tôi để chỉ ra vị trí thích hợp của tên với tập tin có chứa khóa công khai.
Đôi khi nó có thể có ích, đặc biệt nếu chúng tôi lưu trữ nó ở một vị trí không chuẩn hoặc chúng tôi có nhiều hơn một khóa công khai trên máy tính của chúng tôi và chúng tôi muốn chỉ ra một khóa cụ thể.