Tôi muốn có thể đăng nhập vào một điều khiển từ xa thông qua ssh mà không phải nhập mật khẩu mọi lúc.
- Làm thế nào để tôi thiết lập nó?
- Là một lệnh khác nhau cần thiết để thực hiện một phiên không có mật khẩu?
Tôi muốn có thể đăng nhập vào một điều khiển từ xa thông qua ssh mà không phải nhập mật khẩu mọi lúc.
Câu trả lời:
Thực hiện các lệnh này:
ssh-keygen
Sau đó, bạn sẽ cần sao chép khóa mới vào máy chủ của mình :
ssh-copy-id user@host
## or if your server uses custom port no:
ssh-copy-id "user@host -p 1234"
Sau khi khóa được sao chép, ssh vào máy như bình thường:
ssh user@host
Bây giờ bạn có thể đăng nhập mà không cần nhập mật khẩu từ máy cụ thể mà bạn đã thực hiện các lệnh tại.
not-marco@rinzwind-desktop:~$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/not-marco/.ssh/id_rsa):
Created directory '/home/not-marco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/not-marco/.ssh/id_rsa.
Your public key has been saved in /home/not-marco/.ssh/id_rsa.pub.
The key fingerprint is:
b1:25:04:21:1a:38:73:38:3c:e9:e4:5b:81:e9:ac:0f not-marco@rinzwind-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|.o= . oo. |
|*B.+ . . |
|*=o . o . |
| = . = |
|. o S |
|E. |
| o |
| . |
| |
+-----------------+
not-marco@rinzwind-desktop:~$ ssh-copy-id not-marco@server
not-marco@server's password:
Now try logging into the machine, with "ssh 'not-marco@server'", and check in:
~/.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
Điều này giả định rằng bạn đã có thể kết nối thành công với máy chủ của mình thông qua SSH.
Bạn sẽ cần tạo một SSH Key Pair cho phép bạn tự nhận mình là chính mình mà không cần sử dụng mật khẩu. Bạn có thể chọn bảo vệ khóa bằng mật mã nếu muốn, nhưng điều này có thể để trống cho phép truy cập SSH hoàn toàn không cần mật khẩu.
ssh-keygen
này sẽ tạo một tệp id_rsa
và id_rsa.pub
tệp. Các pub
tập tin là những gì diễn ra trên các máy chủ, chìa khóa riêng ( id_rsa
) là những gì ở lại với bạn và là cách bạn xác định chính mình.ssh-copy-id user@server
thay thế người dùng bằng máy chủ và người dùng từ xa bằng tên DNS hoặc địa chỉ IP của máy. Nó sẽ nhắc mật khẩu SSH của bạn, nhập mật khẩu và nếu tất cả hoàn thành thành công, bạn sẽ có thể truy cập vào máy ssh user@server
mà không cần mật khẩu.ssh-keygen
theo các hướng dẫn trên màn hình, sau đó nhập ssh-copy-id user@server
người dùng thay thế bằng người dùng và máy chủ từ xa của bạn bằng máy từ xa
ssh-copy-id "not-marco@127.0.0.1 -p 1234"
.
Cách tôi thường làm như sau:
ssh-keygen -t rsa
(Khi được nhắc nhập mật khẩu, hãy để trống)
Sau đó:
cat ~/.ssh/id_rsa.pub | ssh username@hostname 'cat >> .ssh/authorized_keys'
(Điều này yêu cầu thư mục .ssh phải nằm trong thư mục chính trên tên máy chủ được nhắm mục tiêu, với tệp ủy quyền trong đó)
Tất nhiên, thay thế tên người dùng bằng tên người dùng và tên máy chủ mong muốn bằng tên máy chủ hoặc địa chỉ IP mong muốn
Sau đó, chỉ cần SSH vào ô đó giống như bạn đã quen.
touch
và chmod
trong câu trả lời của Rinzwind?
.ssh/authorized_keys
tệp thành 0600 hoặc điều này sẽ không hoạt động
Tôi thường sử dụng sshpass
cho việc đó, cài đặt sudo apt-get install sshpass
và sử dụng nó như thế này
sshpass -p 'password' ssh your_username@your_server
sshpass
là một cách hack rất hữu ích trong trường hợp bạn không thể thay đổi phương thức xác thực trên máy chủ từ xa!
Vô hiệu hóa xác thực mật khẩu
Do nhiều người có máy chủ SSH sử dụng mật khẩu yếu, nhiều kẻ tấn công trực tuyến sẽ tìm kiếm máy chủ SSH, sau đó bắt đầu đoán mật khẩu một cách ngẫu nhiên. Kẻ tấn công có thể thử hàng ngàn mật khẩu trong một giờ và đoán ngay cả mật khẩu mạnh nhất được cung cấp đủ thời gian. Giải pháp được đề xuất là sử dụng các khóa SSH thay vì mật khẩu. Để khó đoán như một khóa SSH thông thường, mật khẩu sẽ phải chứa 634 chữ cái và số ngẫu nhiên. Nếu bạn luôn có thể đăng nhập vào máy tính của mình bằng khóa SSH, bạn nên tắt hoàn toàn xác thực mật khẩu.
Nếu bạn tắt xác thực mật khẩu, sẽ chỉ có thể kết nối từ các máy tính mà bạn đã phê duyệt cụ thể. Điều này giúp cải thiện bảo mật của bạn một cách ồ ạt, nhưng bạn không thể kết nối với máy tính của mình từ PC của bạn bè mà không chấp thuận trước PC hoặc từ máy tính xách tay của chính bạn khi bạn vô tình xóa khóa của mình.
Bạn nên tắt xác thực mật khẩu trừ khi bạn không có lý do cụ thể.
Để tắt xác thực mật khẩu, hãy tìm dòng sau trong tệp sshd_config của bạn:
#PasswordAuthentication yes
thay thế nó bằng một dòng trông như thế này:
PasswordAuthentication no
Khi bạn đã lưu tệp và khởi động lại máy chủ SSH của mình, bạn thậm chí không được yêu cầu nhập mật khẩu khi đăng nhập.
https://help.ubfox.com/community/SSH/OpenSSH/Configuring#disable-password-authentication
PasswordAuthentication no
ảnh hưởng đến tất cả người dùng? Nếu không, làm cách nào để tắt nó cho người dùng bình thường nhưng vẫn không thay đổi đối với root trong khi tôi đang thử nghiệm nó? Tôi không thực sự muốn foobar nó và tự khóa hoàn toàn.
Permission denied (publickey).
với PasswordAuthentication no
. Tôi nên làm gì đây? Tôi có thay đổi PasswordAuthentication no
trên máy chủ khác không?
Giải pháp này dành riêng cho người dùng sử dụng Windows để ssh vào các máy từ xa của họ, bao gồm hình ảnh đám mây trên AWS Cloud và GCE Cloud
Gần đây đã sử dụng giải pháp này để đăng nhập từ xa hình ảnh vm mới được triển khai trên GCE.
puttygen
tải về puttygenwinscp
tải về wincpNếu bạn sở hữu một khóa riêng:
Mở puttygen
, nhấn nút tải và chọn *.pem
tập tin khóa riêng ( ) của bạn.
Nếu bạn không sở hữu khóa riêng:
puttygen
,(từ nguồn 1, liên kết được đưa ra dưới đây)
notepad
)Sao chép dữ liệu khóa chung của bạn từ phần "Khóa chung để dán vào tệp OpenSSH ủy quyền" của Trình tạo khóa PuTTY và dán dữ liệu khóa vào authorized_keys
tệp.
Hãy chắc chắn rằng chỉ có một dòng văn bản trong tệp này.
Tải tập tin ủy quyền lên thư mục chính tại máy từ xa.
Tạo .ssh
thư mục (nếu không tồn tại)
Sao chép authorized_keys
tập tin vào .ssh
thư mục.
(điều này sẽ thay thế bất kỳ authorized_keys
tập tin tồn tại , lưu ý về điều này).
Nếu tệp tồn tại, chỉ cần thêm nội dung của tệp này vào tệp hiện có.
Chạy các lệnh để đặt quyền:
sudo chmod 700 .ssh && chmod 600 .ssh/authorized_keys
Bây giờ bạn sẽ có thể ssh
vào máy từ xa mà không cần nhập thông tin đăng nhập mỗi lần.
Nếu bạn tạo một cặp khóa công khai / xác định và đăng nhập bằng khóa chung mới được tạo của chúng tôi, bạn sẽ không cần phải nhập mật khẩu của mình. Tùy thuộc vào cấu hình của vòng khóa và / hoặc tác nhân ssh, bạn có thể cần bảo vệ khóa của mình bằng cụm mật khẩu.
Đây là một trong nhiều cách ngắn cho bạn. Điều quan trọng đối với sự an toàn của phương pháp này là khóa riêng được tạo vẫn riêng tư! Bạn không bao giờ nên chia sẻ nó với bất cứ ai hoặc cho phép truy cập nó trong bất kỳ khả năng nào.
Lệnh này tạo ra một khóa hợp lý mạnh trong ~/.ssh/
:
ssh-keygen -b 4096
Trong ~/.ssh/
bạn sẽ tìm thấy khóa công khai của bạn như id_rsa.pub
. Nội dung của nó phải được thêm vào authorized_keys
tệp máy chủ của bạn bằng cách vận chuyển qua phương tiện có thể di chuyển (ổ đĩa bút) hoặc bằng cách kích hoạt xác thực mật khẩu trong thời gian ngắn, sau đó sử dụng ssh-copy-id ~/.ssh/id_rsa.pub username@server
và sau đó vô hiệu hóa lại.
Nếu bạn chọn bảo mật khóa của mình bằng cụm mật khẩu (ở bước đầu tiên), bạn có thể sử dụng ssh-agent
hoặc khóa Ubuntu để bảo mật mã đó ở địa phương để bạn không phải gõ liên tục.
Để thực hiện một số bổ sung:
Mac theo mặc định không có ssh-copy-id
, bạn sẽ phải tự cài đặt nó:
curl https://raw.github.com/beautifulcode/ssh-copy-id-for-OSX/master/ssh-copy-id.sh -o /usr/local/bin/ssh-copy-id
chmod +x /usr/local/bin/ssh-copy-id
tìm thêm tại đây: https://github.com/beautitablecode/ssh-copy-id-for-OSX
nếu bạn đã thực hiện chuyển tiếp cổng, lệnh sẽ như thế này:
ssh-copy-id "not-marco@127.0.0.1 -p 2222"
lưu ý rằng các trích dẫn là cần thiết.
Các ứng dụng ssh
và scp
đăng nhập từ xa và sao chép từ xa, tương ứng, cho phép bạn giao tiếp với một máy chủ từ xa mà không cần cung cấp mật khẩu. Điều này đòi hỏi bạn phải tuân theo một quy trình xác thực như quy trình được mô tả dưới đây. Theo khách hàng, chúng tôi có nghĩa là máy bạn đang ngồi và bởi máy chủ, chúng tôi có nghĩa là máy bạn muốn đăng nhập mà không cần cung cấp mật khẩu. Các bước của quy trình xác thực là:
$HOME/.ssh
.$HOME/.ssh/authorized_keys
hoặc $HOME/.ssh/authorized_keys2
trên máy chủ.Có ba loại giao thức xác thực khác nhau. Bạn chỉ định loại khi chạy ssh-keygen:
chmod 0700
đảm bảo rằng tệp này không thể đọc được cho người khác) và id.pub (khóa chung).ssh-keygen -t rsa
và kết quả trong các tệp id_rsa
(khóa riêng) và id_rsa.pub
(khóa chung)ssh-keygen -t dsa
và kết quả trong các tệp id_dsa
(khóa riêng) và id_dsa.pub
(khóa chung)Khi chạy ssh-keygen, bạn có thể dựa vào các câu trả lời mặc định (ngụ ý rằng bạn không đưa ra cụm mật khẩu). Điều này làm cho toàn bộ thiết lập đơn giản, nhưng cũng không an toàn.
Bạn có thể chỉ định loại khóa sẽ được sử dụng bởi một tùy chọn cho ssh ; ssh -1
buộc sử dụng các khóa RSA1 (giao thức phiên bản 1), trong khi ssh -2
buộc ssh chỉ thử các khóa RSA hoặc DSA (phiên bản giao thức 2). Trong các ví dụ bên dưới, chúng tôi tạo và cài đặt các khóa RSA1 và DSA trên máy chủ từ xa để bạn linh hoạt hơn. Bạn có thể tạo một tập tin cấu hình trong .ssh
thư mục của bạn với dòng
Protocol 1,2
Điều này khiến ssh thử kết nối RSA1 (phiên bản giao thức 1) trước RSA / DSA (phiên bản giao thức 2).
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat identity.pub >> authorized_keys"
remote=user@remotehost # fill in correct user and remotehost names
cd $HOME/.ssh
# create .ssh on remote host if it is non-existing:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh
ssh $remote "cd .ssh; cat id_dsa.pub >> authorized_keys2"
Đây là tất cả những gì bạn phải làm nếu bạn không sử dụng cụm mật khẩu khi tạo khóa. Bạn có thể kiểm tra kết nối bằng cách chạy ssh $ remote và xem liệu bạn có thể đăng nhập mà không cần cung cấp mật khẩu không (bạn có thể cần sử dụng -1
hoặc -2
làm tùy chọn cho ssh ). Tất nhiên, quy trình có thể được lặp lại cho bất kỳ máy nào bạn muốn đăng nhập.
Nếu bạn đã sử dụng cụm mật khẩu, bạn sẽ phải chạy chương trình ssh-agent
để bắt đầu một lớp vỏ đặc biệt, tiếp theo là ssh-add
đăng ký kết hợp khóa / cụm mật khẩu của bạn với sshd
. Xem các trang hướng dẫn cho các chương trình này để biết thêm thông tin.
ssh-no-password.sh
#!/bin/sh
# create ssh connections without giving a password
if [ $# -lt 1 ]; then
echo Usage: $0 username@remotehost
exit
fi
remote="$1" # 1st command-line argument is the user@remotehost address
this=$HOST # name of client host
# first check if we need to run ssh-keygen for generating
# $HOME/.ssh with public and private keys:
if [ ! -d $HOME/.ssh ]; then
echo "just type RETURN for each question:" # no passphrase - unsecure!!
# generate RSA1, RSA and DSA keys:
echo; echo; echo
ssh-keygen
echo; echo; echo
ssh-keygen -t rsa
echo; echo; echo
ssh-keygen -t dsa
else
# we have $HOME/.ssh, but check that we have all types of
# keys (RSA1, RSA, DSA):
if [ ! -f $HOME/.ssh/identity ]; then
# generate RSA1 keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate RSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t rsa
fi
if [ ! -f $HOME/.ssh/id_rsa ]; then
# generate DSA keys:
echo "just type RETURN for each question:" # no passphrase - unsecure!!
ssh-keygen -t dsa
fi
fi
cd $HOME/.ssh
if [ ! -f config ]; then
# make ssh try ssh -1 (RSA1 keys) first and then ssh -2 (DSA keys)
echo "Protocol 1,2" > config
fi
# copy public keys (all three types) to the destination host:
echo; echo; echo
# create .ssh on remote host if it's not there:
ssh $remote 'if [ ! -d .ssh ]; then mkdir .ssh; fi'
# copy RSA1 key:
scp identity.pub ${remote}:.ssh/${this}_rsa1.pub
# copy RSA key:
#scp id_rsa.pub ${remote}:.ssh/${this}_rsa.pub
# copy DSA key:
scp id_dsa.pub ${remote}:.ssh/${this}_dsa.pub
# make authorized_keys(2) files on remote host:
echo; echo; echo
# this one copies all three keys:
#ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_rsa.pub >> authorized_keys2; cat ${this}_dsa.pub >> authorized_keys2;"
# this one copies RSA1 and DSA keys:
ssh $remote "cd .ssh; touch authorized_keys authorized_keys2; cat ${this}_rsa1.pub >> authorized_keys; cat ${this}_dsa.pub >> authorized_keys2;"
echo; echo; echo
echo "try an ssh $remote"
được sao chép từ: http://folk.uio.no/hpl/scripting/doc/ssh-no-password.html
Tôi muốn thêm một câu trả lời cho những người có thể tìm thấy họ nên nhập mật khẩu ngay cả khi họ đã đọc tất cả các câu trả lời ở đây vì bạn đã đặt Nhận dạng duy nhất là có. Và câu trả lời ở đây có thể giúp bạn tiết kiệm nhiều thời gian để quản lý nhiều khóa, là khóa cho git hoặc máy chủ.
Sau khi tôi đã tạo khóa và sao chép nó vào máy chủ:
ssh-keygen # change the file to /home/yourname/.ssh/something
ssh-copy-id -i ~/.ssh/something.pub lerner@192.168.20.160
Tôi thấy nó không hoạt động.
Sau đó tôi đi kiểm tra ~/.ssh/config
tập tin trên máy khách, tôi thấy cái này ở phía dưới:
Host *
IdentitiesOnly yes
Sau đó, tôi thêm điều này ở trên:
Host somename
HostName 192.168.20.160
User lerner
IdentityFile ~/.ssh/something
Tôi chỉ có thể đăng nhập bằng cách nhập ssh somename
.
Sau đó, bạn có thể thêm nhiều khóa ssh bằng tên yêu thích của mình và bạn chỉ cần thêm các cài đặt như bốn dòng trên vào tệp cấu hình.
Máy chủ là tên bạn muốn nhập khi bạn kết nối máy chủ sau này; Tên máy chủ là ip của máy chủ; Người dùng là tên người dùng bạn đăng nhập vào máy chủ; và tệp nhận dạng là tệp nơi bạn lưu trữ khóa bạn đã tạo.