您好,登錄后才能下訂單哦!
小編給大家分享一下如何使用公鑰/私鑰對設定免密的Linux登錄方式,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
使用一組公鑰/私鑰對讓你不需要密碼登錄到遠程 Linux 系統(tǒng)或使用 ssh 運行命令,這會非常方便,但是設置過程有點復雜。下面是幫助你的方法和腳本。
在 Linux 系統(tǒng)上設置一個允許你無需密碼即可遠程登錄或運行命令的帳戶并不難,但是要使它正常工作,你還需要掌握一些繁瑣的細節(jié)。在本文,我們將完成整個過程,然后給出一個可以幫助處理瑣碎細節(jié)的腳本。
設置好之后,如果希望在腳本中運行 ssh
命令,尤其是希望配置自動運行的命令,那么免密訪問特別有用。
需要注意的是,你不需要在兩個系統(tǒng)上使用相同的用戶帳戶。實際上,你可以把公用密鑰用于系統(tǒng)上的多個帳戶或多個系統(tǒng)上的不同帳戶。
設置方法如下。
首先,你需要從要發(fā)出命令的系統(tǒng)上著手。那就是你用來創(chuàng)建 ssh
密鑰的系統(tǒng)。你還需要可以訪問遠程系統(tǒng)上的帳戶并在其上運行這些命令。
為了使角色清晰明了,我們將場景中的第一個系統(tǒng)稱為 “boss”,因為它將發(fā)出要在另一個系統(tǒng)上運行的命令。
因此,命令提示符如下:
boss$
如果你還沒有在 boss 系統(tǒng)上為你的帳戶設置公鑰/私鑰對,請使用如下所示的命令創(chuàng)建一個密鑰對。注意,你可以在各種加密算法之間進行選擇。(一般使用 RSA 或 DSA。)注意,要在不輸入密碼的情況下訪問系統(tǒng),你需要在下面的對話框中的兩個提示符出不輸入密碼。
如果你已經有一個與此帳戶關聯的公鑰/私鑰對,請?zhí)^此步驟。
boss$ ssh-keygen -t rsaGenerating 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@bossThe key's randomart image is:+---[RSA 3072]----+| . .. || E+ .. . || .+ .o + o || ..+.. .o* . || ... So+*B o || + ...==B . || . o . ....++. ||o o . . o..o+ ||=..o.. ..o o. |+----[SHA256]-----+
上面顯示的命令將創(chuàng)建公鑰和私鑰。其中公鑰用于加密,私鑰用于解密。因此,這些密鑰之間的關系是關鍵的,私有密鑰絕不應該被共享。相反,它應該保存在 boss 系統(tǒng)的 .ssh
文件夾中。
注意,在創(chuàng)建時,你的公鑰和私鑰將會保存在 .ssh
文件夾中。
下一步是將公鑰復制到你希望從 boss 系統(tǒng)免密訪問的系統(tǒng)。你可以使用 scp
命令來完成此操作,但此時你仍然需要輸入密碼。在本例中,該系統(tǒng)稱為 “target”。
boss$ scp .ssh/id_rsa.pub myacct@target:/home/myaccountmyacct@target's password:
你需要安裝公鑰在 target 系統(tǒng)(將運行命令的系統(tǒng))上。如果你沒有 .ssh
目錄(例如,你從未在該系統(tǒng)上使用過 ssh
),運行這樣的命令將為你設置一個目錄:
target$ ssh localhost datetarget$ ls -la .sshtotal 12drwx------ 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
仍然在目標系統(tǒng)上,你需要將從“boss”系統(tǒng)傳輸的公鑰添加到 .ssh/authorized_keys
文件中。如果該文件已經存在,使用下面的命令將把它添加到文件的末尾;如果文件不存在,則創(chuàng)建該文件并添加密鑰。
target$ cat id_rsa.pub >> .ssh/authorized_keys
下一步,你需要確保你的 authorized_keys
文件權限為 600。如果還不是,執(zhí)行命令 chmod 600 .ssh/authorized_keys
。
target$ ls -l authorized_keys-rw------- 1 myself myself 569 Jan 19 12:10 authorized_keys
還要檢查目標系統(tǒng)上 .ssh
目錄的權限是否設置為 700。如果需要,執(zhí)行 chmod 700 .ssh
命令修改權限。
target$ ls -ld .sshdrwx------ 2 myacct myacct 4096 Jan 14 15:54 .ssh
此時,你應該能夠從 boss 系統(tǒng)遠程免密運行命令到目標系統(tǒng)。除非目標系統(tǒng)上的目標用戶帳戶擁有與你試圖連接的用戶和主機相同的舊公鑰,否則這應該可以工作。如果是這樣,你應該刪除早期的(并沖突的)條目。
使用腳本可以使某些工作變得更加容易。但是,在下面的示例腳本中,你會遇到的一個煩人的問題是,在配置免密訪問權限之前,你必須多次輸入目標用戶的密碼。一種選擇是將腳本分為兩部分——需要在 boss 系統(tǒng)上運行的命令和需要在 target 系統(tǒng)上運行的命令。
這是“一步到位”版本的腳本:
#!/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 accountecho -n "target system> "read REMecho -n "target user> "read user # create a key pair if no public key existsif [ ! -f ~/.ssh/id_rsa.pub ]; then ssh-keygen -t rsafi # ensure a .ssh directory exists in the remote accountecho checking for .ssh directory on remote systemssh $user@$REM "if [ ! -d /home/$user/.ssh ]; then mkdir /home/$user/.ssh; fi" # share the public key (using local hostname)echo copying the public keyscp ~/.ssh/id_rsa.pub $user@$REM:/home/$user/$user-$LOC.pub # put the public key into the proper locationecho adding key to authorized_keysssh $user@$REM "cat /home/$user/$user-$LOC.pub >> /home/$user/.ssh/authorized_keys" # set permissions on authorized_keys and .ssh (might be OK already)echo setting permissionsssh $user@$REM "chmod 600 ~/.ssh/authorized_keys"ssh $user@$REM "chmod 700 ~/.ssh" # try it out -- should NOT ask for a passwordecho testing -- if no password is requested, you are all setssh $user@$REM /bin/hostname
腳本已經配置為在你每次必須輸入密碼時告訴你它正在做什么。交互看起來是這樣的:
$ ./rem_login_setuptarget system> fruitflytarget user> lolachecking for .ssh directory on remote systemlola@fruitfly's password:copying the public keylola@fruitfly's password:id_rsa.pub 100% 567 219.1KB/s 00:00adding key to authorized_keyslola@fruitfly's password:setting permissionslola@fruitfly's password:testing -- if no password is requested, you are all setfruitfly
在上面的場景之后,你就可以像這樣登錄到 lola 的帳戶:
$ ssh lola@fruitfly[lola@fruitfly ~]$
一旦設置了免密登錄,你就可以不需要鍵入密碼從 boss 系統(tǒng)登錄到 target 系統(tǒng),并且運行任意的 ssh
命令。以這種免密的方式運行并不意味著你的帳戶不安全。然而,根據 target 系統(tǒng)的性質,保護你在 boss 系統(tǒng)上的密碼可能變得更加重要。
以上是“如何使用公鑰/私鑰對設定免密的Linux登錄方式”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。