使用公鑰/私鑰對設定免密的 Linux 登陸方式

使用一組公鑰/私鑰對讓你不須要密碼登陸到遠程 Linux 系統或使用 ssh 運行命令,這會很是方便,可是設置過程有點複雜。下面是幫助你的方法和腳本。html

Linux 系統上設置一個容許你無需密碼便可遠程登陸或運行命令的賬戶並不難,可是要使它正常工做,你還須要掌握一些繁瑣的細節。在本文,咱們將完成整個過程,而後給出一個能夠幫助處理瑣碎細節的腳本。linux

設置好以後,若是但願在腳本中運行 ssh 命令,尤爲是但願配置自動運行的命令,那麼免密訪問特別有用。git

須要注意的是,你不須要在兩個系統上使用相同的用戶賬戶。實際上,你能夠把公用密鑰用於系統上的多個賬戶或多個系統上的不一樣賬戶。github

設置方法以下。算法

在哪一個系統上啓動?

首先,你須要從要發出命令的系統上着手。那就是你用來建立 ssh 密鑰的系統。你還須要能夠訪問遠程系統上的賬戶並在其上運行這些命令。安全

爲了使角色清晰明瞭,咱們將場景中的第一個系統稱爲 「boss」,由於它將發出要在另外一個系統上運行的命令。bash

所以,命令提示符以下:less

boss$
複製代碼

若是你尚未在 boss 系統上爲你的賬戶設置公鑰/私鑰對,請使用以下所示的命令建立一個密鑰對。注意,你能夠在各類加密算法之間進行選擇。(通常使用 RSA 或 DSA。)注意,要在不輸入密碼的狀況下訪問系統,你須要在下面的對話框中的兩個提示符出不輸入密碼。dom

若是你已經有一個與此賬戶關聯的公鑰/私鑰對,請跳過此步驟。ssh

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 same passphrase again:                           <== 按下回車鍵便可
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 系統上的密碼可能變得更加劇要。


via: www.networkworld.com/article/351…

做者:Sandra Henry-Stocker 選題:lujun9972 譯者:laingke 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

相關文章
相關標籤/搜索