使用公鑰/私鑰對設定免密的 Linux 登入方式
使用一組公鑰/私鑰對讓你不需要密碼登入到遠端 Linux 系統或使用 ssh 執行命令,這會非常方便,但是設定過程有點複雜。下面是幫助你的方法和指令碼。
在 Linux 系統上設定一個允許你無需密碼即可遠端登入或執行命令的帳戶並不難,但是要使它正常工作,你還需要掌握一些繁瑣的細節。在本文,我們將完成整個過程,然後給出一個可以幫助處理瑣碎細節的指令碼。
設定好之後,如果希望在指令碼中執行 ssh
命令,尤其是希望配置自動執行的命令,那麼免密訪問特別有用。
需要注意的是,你不需要在兩個系統上使用相同的使用者帳戶。實際上,你可以把公用金鑰用於系統上的多個帳戶或多個系統上的不同帳戶。
設定方法如下。
在哪個系統上啟動?
首先,你需要從要發出命令的系統上著手。那就是你用來建立 ssh
金鑰的系統。你還需要可以訪問遠端系統上的帳戶並在其上執行這些命令。
為了使角色清晰明瞭,我們將場景中的第一個系統稱為 “boss”,因為它將發出要在另一個系統上執行的命令。
因此,命令提示符如下:
boss$
如果你還沒有在 boss 系統上為你的帳戶設定公鑰/私鑰對,請使用如下所示的命令建立一個金鑰對。注意,你可以在各種加密演算法之間進行選擇。(一般使用 RSA 或 DSA。)注意,要在不輸入密碼的情況下訪問系統,你需要在下面的對話方塊中的兩個提示符出不輸入密碼。
如果你已經有一個與此帳戶關聯的公鑰/私鑰對,請跳過此步驟。
boss$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/myself/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): <== 按下Enter鍵即可
Enter same passphrase again: <== 按下Enter鍵即可
Your identification has been saved in /home/myself/.ssh/id_rsa.
Your public key has been saved in /home/myself/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:1zz6pZcMjA1av8iyojqo6NVYgTl1+cc+N43kIwGKOUI myself@boss
The key's randomart image is:
+---[RSA 3072]----+
| . .. |
| E+ .. . |
| .+ .o + o |
| ..+.. .o* . |
| ... So+*B o |
| + ...==B . |
| . o . ....++. |
|o o . . o..o+ |
|=..o.. ..o o. |
+----[SHA256]-----+
上面顯示的命令將建立公鑰和私鑰。其中公鑰用於加密,私鑰用於解密。因此,這些金鑰之間的關係是關鍵的,私有金鑰絕不應該被共享。相反,它應該儲存在 boss 系統的 .ssh
資料夾中。
注意,在建立時,你的公鑰和私鑰將會儲存在 .ssh
資料夾中。
下一步是將公鑰複製到你希望從 boss 系統免密訪問的系統。你可以使用 scp
命令來完成此操作,但此時你仍然需要輸入密碼。在本例中,該系統稱為 “target”。
boss$ scp .ssh/id_rsa.pub myacct@target:/home/myaccount
myacct@target's password:
你需要安裝公鑰在 target 系統(將執行命令的系統)上。如果你沒有 .ssh
目錄(例如,你從未在該系統上使用過 ssh
),執行這樣的命令將為你設定一個目錄:
target$ ssh localhost date
target$ ls -la .ssh
total 12
drwx------ 2 myacct myacct 4096 Jan 19 11:48 .
drwxr-xr-x 6 myacct myacct 4096 Jan 19 11:49 ..
-rw-r--r-- 1 myacct myacct 222 Jan 19 11:48 known_hosts
仍然在目標系統上,你需要將從“boss”系統傳輸的公鑰新增到 .ssh/authorized_keys
檔案中。如果該檔案已經存在,使用下面的命令將把它新增到檔案的末尾;如果檔案不存在,則建立該檔案並新增金鑰。
target$ cat id_rsa.pub >> .ssh/authorized_keys
下一步,你需要確保你的 authorized_keys
檔案許可權為 600。如果還不是,執行命令 chmod 600 .ssh/authorized_keys
。
target$ ls -l authorized_keys
-rw------- 1 myself myself 569 Jan 19 12:10 authorized_keys
還要檢查目標系統上 .ssh
目錄的許可權是否設定為 700。如果需要,執行 chmod 700 .ssh
命令修改許可權。
target$ ls -ld .ssh
drwx------ 2 myacct myacct 4096 Jan 14 15:54 .ssh
此時,你應該能夠從 boss 系統遠端免密執行命令到目標系統。除非目標系統上的目標使用者帳戶擁有與你試圖連線的使用者和主機相同的舊公鑰,否則這應該可以工作。如果是這樣,你應該刪除早期的(並衝突的)條目。
使用指令碼
使用指令碼可以使某些工作變得更加容易。但是,在下面的示例指令碼中,你會遇到的一個煩人的問題是,在配置免密訪問許可權之前,你必須多次輸入目標使用者的密碼。一種選擇是將指令碼分為兩部分——需要在 boss 系統上執行的命令和需要在 target 系統上執行的命令。
這是“一步到位”版本的指令碼:
#!/bin/bash
# NOTE: This script requires that you have the password for the remote acct
# in order to set up password-free access using your public key
LOC=`hostname` # the local system from which you want to run commands from
# wo a password
# get target system and account
echo -n "target system> "
read REM
echo -n "target user> "
read user
# create a key pair if no public key exists
if [ ! -f ~/.ssh/id_rsa.pub ]; then
ssh-keygen -t rsa
fi
# ensure a .ssh directory exists in the remote account
echo checking for .ssh directory on remote system
ssh $user@$REM "if [ ! -d /home/$user/.ssh ]; then mkdir /home/$user/.ssh; fi"
# share the public key (using local hostname)
echo copying the public key
scp ~/.ssh/id_rsa.pub $user@$REM:/home/$user/$user-$LOC.pub
# put the public key into the proper location
echo adding key to authorized_keys
ssh $user@$REM "cat /home/$user/$user-$LOC.pub >> /home/$user/.ssh/authorized_ke
ys"
# set permissions on authorized_keys and .ssh (might be OK already)
echo setting permissions
ssh $user@$REM "chmod 600 ~/.ssh/authorized_keys"
ssh $user@$REM "chmod 700 ~/.ssh"
# try it out -- should NOT ask for a password
echo testing -- if no password is requested, you are all set
ssh $user@$REM /bin/hostname
指令碼已經配置為在你每次必須輸入密碼時告訴你它正在做什麼。互動看起來是這樣的:
$ ./rem_login_setup
target system> fruitfly
target user> lola
checking for .ssh directory on remote system
lola@fruitfly's password:
copying the public key
lola@fruitfly's password:
id_rsa.pub 100% 567 219.1KB/s 00:00
adding key to authorized_keys
lola@fruitfly's password:
setting permissions
lola@fruitfly's password:
testing -- if no password is requested, you are all set
fruitfly
在上面的場景之後,你就可以像這樣登入到 lola 的帳戶:
$ ssh lola@fruitfly
[lola@fruitfly ~]$
一旦設定了免密登入,你就可以不需要鍵入密碼從 boss 系統登入到 target 系統,並且執行任意的 ssh
命令。以這種免密的方式執行並不意味著你的帳戶不安全。然而,根據 target 系統的性質,保護你在 boss 系統上的密碼可能變得更加重要。
作者:Sandra Henry-Stocker 選題:lujun9972 譯者:laingke 校對:wxy
相關文章
- 使用公鑰和私鑰實現LINUX下免密登入Linux
- linux ssh公鑰免密碼登入Linux密碼
- ssh公鑰免密碼登入密碼
- 公鑰私鑰
- 公鑰和私鑰
- php使用openssl生成公鑰私鑰PHP
- Linux 配置 SSH 秘鑰免密碼登入Linux密碼
- 金鑰,私鑰,公鑰的區分
- WebAuthn預覽 – 基於公鑰的免密認證登入Web
- WebAuthn預覽 - 基於公鑰的免密認證登入Web
- 公鑰基礎設施和密碼學中的私鑰的角色密碼學
- 使用openssl生成rsa公鑰和私鑰
- centos ssh免密碼秘鑰登入CentOS密碼
- SSH 公鑰私鑰的生成管理
- php中的公鑰和私鑰PHP
- Mac 使用openssl生成RSA公鑰和私鑰Mac
- openSSL生成公鑰和私鑰
- 完成ssh無密碼的驗證,採用公鑰、私鑰密碼
- SSH-keygen rsa 金鑰對根據私鑰生成公鑰
- Linux配置SSH免密登陸(公私鑰登陸)Linux
- 私鑰與公鑰有何不同?
- 01_私鑰、公鑰和地址
- SSH公鑰私鑰認證原理
- 【轉】linux設定金鑰登入(只允許金鑰登入)Linux
- 蘋果ios簽名的公鑰與私鑰蘋果iOS
- OpenSSL 公鑰私鑰加解密封裝解密封裝
- [SSL]公鑰與私鑰典型應用
- 非對稱加密演算法RSA中的公鑰和私鑰加密演算法
- linux配置使用秘鑰登入Linux
- MAC OSX 下 使用openssl 命令 生成RSA公鑰和私鑰Mac
- 國密2 (sm2)非對稱加密解密工具--支援生成公鑰私鑰對及加密解密加密解密
- git 設定私鑰踩坑Git
- linux 設定ssh 免密登入Linux
- unbuntu16.04 伺服器的 免密登入、祕鑰登入和禁止密碼登入 配置伺服器密碼
- unbuntu16.04 伺服器的 免密登入、秘鑰登入和禁止密碼登入 配置伺服器密碼
- java中的使用RSA演算法進行公鑰加密私鑰解密 .Java演算法加密解密
- 把Java生成的RSA公鑰、私鑰轉換成.NET使用的XML格式JavaXML
- 【加密演算法】PFX檔案提取公鑰私鑰加密演算法