Làm cách nào để thiết lập SSH để tôi không phải nhập mật khẩu khi kết nối với máy chủ?
~/.ssh/config
hiện tại là bắt buộc PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Làm cách nào để thiết lập SSH để tôi không phải nhập mật khẩu khi kết nối với máy chủ?
~/.ssh/config
hiện tại là bắt buộc PubkeyAcceptedKeyTypes ssh-rsa*,ssh-dss*
Câu trả lời:
Nếu bạn tình cờ sử dụng Gnome, ứng dụng cá ngựa ("Mật khẩu và khóa mã hóa") có thể làm điều đó cho bạn: Tệp -> Mới -> Khóa vỏ an toàn .
Nếu bạn thích thiết bị đầu cuối, hãy chạy để tạo ra một cặp khóa. Các loại khóa hợp lệ là:ssh-keygen -t <type>
Chương trình sẽ yêu cầu bạn nhập cụm mật khẩu và vị trí lưu khóa mới. Nên sử dụng đường dẫn mặc định được đề xuất vì tất cả các công cụ khác sẽ tìm kiếm ở đó.
Một lần nữa, cá ngựa thường có thể làm điều đó cho bạn - trong Khóa cá nhân của tôi , nhấp chuột phải vào khóa SSH của bạn và chọn Khóa cấu hình cho lớp vỏ an toàn .
Hoặc, ssh-copy-id -i ~/.ssh/id_rsa.pub remote-user@remote-host
trong thiết bị đầu cuối.
Hoặc, hoàn toàn thủ công từng bước:
.ssh
trong thư mục chính của người dùng từ xa trên máy chủ từ xa.authorized_keys
(nếu nó chưa tồn tại).umask
tự do hơn bình thường, hãy làm cho tệp không thể ghi nhóm : chmod go-w ~/.ssh ~/.ssh/authorized_keys
.~/.ssh/id_rsa.pub
) vào ~/.ssh/authorized_keys
tệp từ xa .Nếu bạn tải khóa riêng của mình vào một tác nhân ssh , nó sẽ giữ khóa được giải mã trong bộ nhớ. Chúng tôi muốn điều này để tránh nhập lại mật khẩu bất cứ khi nào chúng tôi vào máy chủ.
Đầu tiên, tác nhân phải được khởi động hoặc đường dẫn của ổ cắm truyền thông được khởi chạy được tải vào một biến. Chạy ssh-agent trên một thiết bị đầu cuối sẽ tạo ra các lệnh để gán và thiết lập các biến tác nhân. Các lệnh này có thể được lưu trong một tệp để sử dụng trong một thiết bị đầu cuối khác. Ngoài ra, người ta có thể chạy các lệnh này và quên đi việc sử dụng lại cùng một tác nhân trong một thiết bị đầu cuối khác. ví dụ : eval $(ssh-agent)
.
Tải khóa là một vấn đề đơn giản để thực hiện ssh-add
và cung cấp cho nó cụm từ vượt qua.
Nếu bạn đang sử dụng Gnome, gnome-keyring-daemon thường cung cấp chức năng tác nhân SSH giống như ssh-agent, vì vậy bạn không cần phải bắt đầu bất cứ điều gì. Gnome cũng sẽ tự động tải và mở khóa khi đăng nhập.
Nếu mọi thứ đã được thực hiện chính xác, việc sử dụng sẽ không nhắc bạn nhập mật khẩu. Nếu có gì đó không đúng với tác nhân và không phải khóa, bạn sẽ được yêu cầu nhập cụm từ mật khẩu cho khóa và không phải mật khẩu cho tài khoản người dùng.ssh user@server
Bất cứ điều gì sử dụng ssh để liên lạc sẽ hoạt động mà không cần nhập mật khẩu tài khoản người dùng khi khóa chính xác được tải trong tác nhân. Các chương trình như scp , sftp và rsync sử dụng điều này.
id_dsa
thay vì id_rsa
và ECDSA sẽ có id_ecdsa
.authorized_keys2
- nhưng thực sự không chắc bạn sẽ tìm thấy bất cứ thứ gì cũ hơn 5.0 đang sử dụng.lsh
, ssh.com
và các máy chủ SSH khác (Unix và không) không được bao gồm trong hướng dẫn này.Sao chép khóa chung vào máy chủ từ xa:
ssh-copy-id -i ~ / .ssh / id_rsa.pub myaccount @ remotehost # này mèo ~ / .ssh / id_rsa.pub | ssh myaccount @ remotehost \ 'mkdir -p ~ / .ssh; mèo >> ~ / .ssh / ủy quyền_key '# hoặc cái này
ssh-agent> ~ / .ssh / cross-terminal-agent . ~ / .ssh / cross-terminal-agent
ssh-copy-id
sao chép khóa chung vào máy chủ đích và tự động đặt quyền.
ssh-keygen -f ~/.ssh/id_rsa -N "";ssh-copy-id -i ~/.ssh/id_rsa username@server-ip-or-address
(chỉ cần thay thế username@server-ip-or-address
).
Bạn đã không chỉ định Unix bạn đang sử dụng cái gì, Unix bạn đang kết nối với cái gì, bạn đang sử dụng shell nào, biến thể SSH nào bạn đang sử dụng, v.v. Vì vậy, một số điều này có thể cần được điều chỉnh một chút; điều này dựa trên các phiên bản hợp lý gần đây của OpenSSH, được sử dụng trên rất nhiều biến thể unix.
Đây là tất cả từ hệ thống máy tính để bàn địa phương của bạn.
ssh-keygen
Đảm bảo sử dụng mặc định cho tên khóa. Tôi khuyên bạn nên đặt cụm mật khẩu trên khóa đó, nếu không đó là vấn đề bảo mật. "-t rsa" sẽ không phải là một ý tưởng tồi, nhưng có lẽ không cần thiết.
ssh-copy-id username@server
Điều đó sẽ hỏi bạn mật khẩu bạn sử dụng để đăng nhập và thiết lập công cụ ủy quyền cho bạn. (không cần phải làm bằng tay)
Thì đây:
`ssh-agent`
hoặc có thể thế này:
exec ssh-agent sh
hoặc là:
exec ssh-agent bash
Điều đó sẽ khởi động một tác nhân SSH có thể giữ khóa của bạn. Trên nhiều biến thể Unix hiện đại, nếu bạn đăng nhập bằng đồ họa, điều này sẽ xảy ra. Biến thể đầu tiên (với backticks) đặt một tác nhân ssh vào nền và thiết lập các biến môi trường để nói chuyện với nó. Hai cái thứ hai có tác nhân chạy shell cho bạn, để khi bạn thoát khỏi shell, tác nhân sẽ thoát.
Nhiều biến thể Unix hiện đại sẽ có một tác nhân chạy cho bạn, đặc biệt nếu bạn đăng nhập bằng đồ họa. Bạn có thể thử " ps aux | grep ssh-agent
" hoặc " ps -ef | grep ssh-agent
"; nếu một cái gì đó đang chạy, sử dụng nó.
Sau đó, cuối cùng:
ssh-add
Nó sẽ yêu cầu một mật khẩu; cung cấp cho nó một trong những bạn đã cho ssh-keygen. Cũng có cách để làm cho nó yêu cầu đồ họa. Và bạn có thể đặt công cụ ssh-agent và ssh-add vào tập lệnh đăng nhập của mình (thiết lập khác nhau tùy thuộc vào trình bao bạn sử dụng) để tự động hóa việc này, nhưng một số biến thể Unix (ví dụ Ubuntu Linux hiện tại) sẽ tự động làm điều đó rằng tất cả những gì bạn thực sự cần làm là tạo một khóa và sử dụng ssh-copy-id để thiết lập nó trên máy chủ từ xa.
Bây giờ, " ssh username@server
" sẽ hoạt động mà không yêu cầu bất kỳ xác thực. Đằng sau hậu trường, nó sử dụng một chiếc chìa khóa mà nhân viên ssh đang giữ và yêu cầu nhân viên thực hiện các thủ thuật ký phép thuật cho nó.
Cũng có thể làm điều này trong PuTTY trên Windows.
Khi bạn đã có cặp khóa công khai / riêng tư được thiết lập (như các câu trả lời khác ở đây hiển thị) chạy PuttyGen. Trong đó, tải khóa riêng hiện có mà bạn đã thiết lập và sau đó lưu nó dưới dạng khóa riêng PuTTY (ppk).
Sau đó, trong PuTTY, chỉ cần nhấp vào phiên đã lưu mà bạn muốn tự động đăng nhập và nhấp vào Tải. Từ đây đi vào Kết nối -> Dữ liệu trong ngăn bên trái và nhập "Tên người dùng đăng nhập tự động" trong tên người dùng cho máy chủ từ xa đó:
Sau đó, đi vào Kết nối -> SSH -> Xác thực và duyệt tìm ppk bạn đã tạo trong PuttyGen:
Sau đó quay lại trang phiên và lưu phiên bạn đã tải trước đó.
Từ một câu hỏi tương tự trên ServerFault , tôi khuyên bạn nên sử dụng ssh-copy-id , thực hiện tất cả các bước liên quan đến việc thiết lập khóa xác thực cho bạn:
ssh-copy-id là một tập lệnh sử dụng ssh để đăng nhập vào một máy từ xa (có lẽ sử dụng mật khẩu đăng nhập, vì vậy nên xác thực mật khẩu, trừ khi bạn đã sử dụng thông minh nhiều danh tính)
Nó cũng thay đổi các quyền của nhà người dùng từ xa, ~ / .ssh và ~ / .ssh / ủy quyền để xóa khả năng ghi của nhóm (điều này sẽ ngăn bạn đăng nhập, nếu sshd từ xa có StrictModes được đặt trong cấu hình của nó).
Nếu tùy chọn -i được cung cấp thì tệp nhận dạng (mặc định là ~ / .ssh / id.pub) được sử dụng, bất kể có bất kỳ khóa nào trong tác nhân ssh của bạn hay không.
Tất cả bạn cần làm chỉ đơn giản là thế này:
ssh-copy-id user@host
Nhập mật khẩu của bạn một lần, và bạn tốt để đi!
Ngoài tất cả những gì đã được nói về cách đặt khóa ssh, tôi khuyên dùng Keychain làm giao diện điều khiển ssh-agent cho phép bạn xử lý chỉ một lần cho mỗi quy trình hệ thống thay vì mỗi lần đăng nhập.
Tôi biết đã có các công cụ Gnome và KDE làm tương tự nhưng nếu bạn là người nghiện bảng điều khiển thì điều này thật tuyệt (và có thể được sử dụng trên hầu hết các hệ thống Unix).
Để sử dụng nó, chỉ cần nối các phần sau vào ~/.bashrc
(tương tự cho các shell khác):
if type keychain >/dev/null 2>/dev/null; then
keychain --nogui -q <all your SSH/PGP keys>
[ -f ~/.keychain/${HOSTNAME}-sh ] && . ~/.keychain/${HOSTNAME}-sh
[ -f ~/.keychain/${HOSTNAME}-sh-gpg ] && . ~/.keychain/${HOSTNAME}-sh-gpg
fi
http: // linuxpropet.org/art_9.html
Mục đích của bạn
Bạn muốn sử dụng Linux và OpenSSH để tự động hóa các tác vụ của mình. Do đó, bạn cần đăng nhập tự động từ máy chủ A / người dùng a đến Máy chủ B / người dùng b. Bạn không muốn nhập bất kỳ mật khẩu nào, vì bạn muốn gọi ssh từ một tập lệnh shell.
Tôi đã viết hướng dẫn rất ngắn này sau khi thực sự thất vọng với THỰC SỰ THỰC SỰ hướng dẫn dài vì thực sự nó rất đơn giản :)
test -f ~/.ssh/id_rsa.pub || ssh-keygen -t rsa #press enter twice if given prompts, then "ssh-add"
scp ~/.ssh/id_rsa.pub destID@destMachine:/tmp/ #type password
ssh destID@destMachine #type password
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
rm /tmp/id_rsa.pub
ssh-keygen
. (Nếu nó cho bạn biết bạn phải chỉ định một loại, hãy làm ssh-keygen -t rsa
.) Khi nó yêu cầu bạn cho một vị trí tệp, hãy lấy mặc định. Khi nó hỏi bạn một cụm mật khẩu, hãy nhấn enter để không có cụm mật khẩu.cat ~/.ssh/id_rsa.pub
(hoặc bất kể vị trí tệp mặc định ssh-keygen
là gì, mặc dù bạn phải có một bản cài đặt thực sự cũ ssh
để nó khác biệt); sao chép đầu ra vào clipboard của bạn.~/.ssh/authorized_keys
(nếu ~/.ssh
không tồn tại, slogin
ở một nơi nào đó; đây là cách đơn giản, dễ dàng để tạo tệp với quyền phù hợp). Dán bảng tạm của bạn (chứa id_rsa.pub
từ máy chủ khác) vào tệp này.Nếu bạn muốn làm tất cả trong thiết bị đầu cuối trong Linux:
Trên máy chủ
cd ~ / .ssh /
ssh-keygen -t {rsa | dsa} -b {1024 | 2048 | 4096} -C "một số văn bản nhận xét nếu bạn muốn" -f id_ArbitraryName
Các mục trong {} là các tùy chọn, sử dụng rsa hoặc dsa và chọn kích thước bit (lớn hơn sẽ an toàn hơn)
Sau đó, bạn cần thêm quyền vào các tệp ủy quyền và khóa ủy quyền.
mèo id_ArbitraryName.pub >> ủy quyền
mèo id_AribtraryName.pub >> ủy quyền_keys2
Sau đó tải tệp id_AribtraryName vào hộp bạn muốn ssh từ đó. Nếu hộp kết nối là unix dựa trên, một tập tin cấu hình có thể là cần thiết (trong putty, ai đó ở trên đã che đậy điều đó).
Trên hộp kết nối
Trong tệp cấu hình của bạn - vim ~ / .ssh / config
Máy chủ ví dụ.host.com # hoặc tên máy tính của bạn
Tên người dùng
Danh tínhFile ~ / .ssh / id_ArbitraryName
Tệp cấu hình cần quyền 600. Thư mục SSh cần 700.
Hy vọng rằng sẽ giúp nếu bạn gặp phải vấn đề cấu hình bị bỏ qua rất nhiều.