1. 程式人生 > >linux ssh 使用深度解析【key登入詳解】

linux ssh 使用深度解析【key登入詳解】

ssh介紹

SSH全稱Secure SHell,顧名思義就是非常安全的shell的意思,SSH協議是IETF(Internet Engineering Task Force)的Network Working Group所制定的一種協議。SSH的主要目的是用來取代傳統的telnet和R系列命令(rlogin,rsh,rexec等)遠端登陸和遠端執行命令的工具,實現對遠端登陸和遠端執行命令加密。防止由於網路監聽而出現的密碼洩漏,對系統構成威脅。

ssh協議目前有SSH1和SSH2,SSH2協議相容SSH1。目前實現SSH1和SSH2協議的主要軟體有OpenSSH和SSH Communications Security Corporation 公司的SSH Communications 軟體。前者是OpenBSD組織開發的一款免費的SSH軟體,後者是商業軟體,因此在linux、FreeBSD、OpenBSD、NetBSD等免費類UNIX系統種,通暢都使用OpenSSH作為SSH協議的實現軟體。因此,本文重點介紹一下OpenSSH的使用。需要注意的是OpenSSH和SSH Communications的登陸公鑰/私鑰的格式是不同的,如果想用SSH Communications產生的私鑰/公鑰對來登入到使用OpenSSH的linux系統需要對公鑰/私鑰進行格式轉換。

在出現SSH之前,系統管理員需要登入遠端伺服器執行系統管理任務時,都是用telnet來實現的,telnet協議採用明文密碼傳送,在傳送過程中對資料也不加密,很容易被不懷好意的人在網路上監聽到密碼。同樣,在SSH工具出現之前R系列命令也很流行(由於這些命令都以字母r開頭,故把這些命令合稱為R系列命令R是remote的意思),比如rexec是用來執行遠端伺服器上的命令的,和telnet的區別是telnet需要先登陸遠端伺服器再實行相關的命令,而R系列命令可以把登陸和執行命令並登出系統的操作整合在一起。這樣就不需要為在遠端伺服器上執行一個命令而特地登陸伺服器了。

SSH是一種加密協議,不僅在登陸過程中對密碼進行加密傳送,而且對登陸後執行的命令的資料也進行加密,這樣即使別人在網路上監聽並截獲了你的資料包,他也看不到其中的內容。OpenSSH已經是目前大多數linux和BSD作業系統(甚至cygwin)的標準組件,因此關於如何安裝OpenSSH本文就不再敘述了,如果不出意外,你的系統上必定已經安裝好了OpenSSH。

OpenSSH軟體包包含以下命令:

sshd ―― SSH服務端程式

sftp-server ―― SFTP服務端程式(類似FTP但提供資料加密的一種協議)

scp ―― 非互動式sftp-server的客戶端,用來向伺服器上傳/下載檔案

sftp ―― 互動式sftp-server客戶端,用法和ftp命令一樣。

slogin ―― ssh的別名

ssh ―― SSH協議的客戶端程式,用來登入遠端系統或遠端執行命令

ssh-add ――    SSH代理相關程式,用來向SSH代理新增dsa key

ssh-agent ――    ssh代理程式

ssh-keyscan ―― ssh public
key 生成器

ssh登陸

SSH最常用的使用方式是代替telnet進行遠端登陸。不同於telnet的密碼登陸,SSH還同時支援Publickey、Keybord Interactive、GSSAPI等多種登入方式,不像telnet那樣只有輸入系統密碼一種途徑。目前最常用的登陸方式還是傳統的Password方式和Publickey方式登陸。下面以Redhat AS4為例,舉例說明這兩種登陸方式的用法。

[root@mail ~]# ssh 172.18.6.227
The authenticity of host ’172.18.6.227 (172.18.6.227)’ can’t be established.
RSA key fingerprint is 43:80:f2:e1:9b:b6:6e:c0:e2:dd:57:8f:ed:89:b3:81.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’172.18.6.227′ (RSA) to the list of known hosts.
[email protected]172.18.6.227‘s password: 
Last login: Thu Jul 12 18:47:47 2007 from 172.18.6.130
[root@qmail ~]#

第一次登陸後,ssh就會把登陸的ssh指紋存放在使用者home目錄的.ssh目錄的know_hosts檔案中,如果遠端系統重灌過系統,ssh指紋已經改變,你需要把 .ssh 目錄下的know_hosts中的相應指紋刪除,再登陸回答yes,方可登陸。請注意.ssh目錄是開頭是”.”的隱藏目錄,需要ls –a引數才能看到。而且這個目錄的許可權必須是700,並且使用者的home目錄也不能給其他使用者寫許可權,否則ssh伺服器會拒絕登陸。如果發生不能登陸的問題,請察看伺服器上的日誌檔案/var/log/secure。通常能很快找到不能登陸的原因。

ssh遠端執行命令:

[root@mail ~]# ssh 172.18.6.227 ls -l /
root@172.18.6.227‘s password: 
total 1244
drwxr-xr-x    2 root root    4096 Jun 26 04:02 bin
drwxr-xr-x    4 root root    4096 Mar 29 11:17 boot
drwxr-xr-x    2 root root    4096 Jan 25 11:26 command
drwxr-xr-x   15 root root    4096 Jun 12 20:09 data
drwxr-xr-x    9 root root    5360 Jul  2 13:38 dev
drwxr-xr-x   87 root root   12288 Jul 11 04:02 etc
drwxr-xr-x   20 root root    4096 Apr 10 10:54 home
drwxr-xr-x    2 root root    4096 Aug 13  2004 initrd

輸入正確的密碼後,ssh會連結遠端伺服器的sshd伺服器程式,然後執行遠端伺服器上的

ls –l /命令 ,並把輸入結果傳到本地伺服器。相當於你先登陸到遠端伺服器,然後再實行命令ls –l /,最後再登出伺服器。需要提醒的是,如果你需要登陸伺服器並執行不止一個命令,必須要把命令用單引號或雙引號引起來:

ssh 172.18.6.227cd /root && ls “

ssh的遠端實行命令的功能是用來代替原始的R系列命令的,在ssh出現之前系統管理員們不得不用rexec, rsh等不安全的遠端執行命令工具來完成同樣的操作。這個功能在管理大批機器的時候是非常有用的,比如我要重啟10.0.0.0/24網段內所有的伺服器,只要輸入一條命令:

for i in $(seq 1 254) ; do  ssh 10.0.0.${i} reboot ; done

機器之間相互認證

就可以完成重啟所有伺服器的操作,也許你會說,這要雖然不需要再登陸每一臺伺服器了,但是還是要每次輸入密碼,多麻煩啊。別急,下面要講的用ssh public key方式登陸就是要解決問題。

採用public key登入:

openssh的ssh-keygen命令用來產生這樣的私鑰和公鑰。
[root@mail ~]# ssh-keygen -b 1024 -t dsa -C gucuiwen@myserver.com
Generating public/private dsa key pair.
提示正在生成,如果選擇4096長度,可能需要較長時間
Enter file in which to save the key (/root/.ssh/id_dsa): 
#詢問把公鑰和私鑰放在那裡,回車用預設位置即可
Enter passphrase (empty for no passphrase): 
#詢問輸入私鑰密語,為了實現自動登陸,應該不要密語,直接回車
Enter same passphrase again: 
#再次提示輸入密語,再次直接回車
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
#提示公鑰和私鑰已經存放在/root/.ssh/目錄下
The key fingerprint is:
71:e5:cb:15:d3:8c:05:ed:05:84:85:32:ce:b1:31:ce gucuiwen@myserver.com
#提示key的指紋
說明:
-b 1024 採用長度為1024位元組的公鑰/私鑰對,最長4096位元組,一般10242048就可以了,太長的話加密解密需要的時間也長。
-t dsa  採用dsa加密方式的公鑰/私鑰對,除了dsa還有rsa方式,rsa方式最短不能小於768位元組長度。
-C gucuiwen@myserver.com 對這個公鑰/私鑰對的一個註釋和說明,一般用所有人的郵件代替。可以省略不寫,更多其他引數請man ssh-keygen。
[[email protected] ~]# ls -l /root/.ssh
total 16
-rw——-  1 root root 668 Jul 12 20:07 id_dsa
-rw-r–r–  1 root root 611 Jul 12 20:07 id_dsa.pub
-rw-r–r–  1 root root 222 Jul 12 19:37 known_hosts

產生的公鑰/私鑰檔案在使用者home目錄的.ssh目錄下,其中id_dsa.pub是公鑰,把產生的公鑰上傳到需要登陸的伺服器的對應使用者目錄的home目錄的.ssh目錄下,再一次強呼叫戶自己的目錄(home目錄)必須不能有其他人可寫的許可權,.ssh目錄的許可權必須是700,即除了使用者自己,其他人沒有任何讀寫察看該目錄的許可權,否則ssh伺服器會拒絕登陸。ssh預設的公鑰檔案是使用者home目錄下的.ssh目錄下的authorized_keys檔案,因此需要把產生的公鑰以這個檔名放到伺服器的/root/.ssh/目錄下,這個檔案中可以存放多個客戶端的公鑰檔案,就好比一個大門上可以上很多鎖,可以有不同的鑰匙來嘗試開鎖,只要有一個鎖被打開了,門就可以打開了。放到伺服器上應該是這樣子的:

私鑰必須是600許可權,否則ssh伺服器會拒絕使用者登陸。

大致就是這個樣子了。現把/etc/ssh/ssh_config 和 /etc/ssh/sshd_config的配置說下。

/etc/ssh/ssh_config: 介紹

Host *
選項“Host”只對能夠匹配後面字串的計算機有效。“*”表示所有的計算機。
ForwardAgent no
“ForwardAgent”設定連線是否經過驗證代理(如果存在)轉發給遠端計算機。
ForwardX11 no
“ForwardX11”設定X11連線是否被自動重定向到安全的通道和顯示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”設定是否使用基於rhosts的安全驗證。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”設定是否使用用RSA演算法的基於rhosts的安全驗證。
RSAAuthentication yes
“RSAAuthentication”設定是否使用RSA演算法進行安全驗證。
PasswordAuthentication yes
“PasswordAuthentication”設定是否使用口令驗證。
FallBackToRsh no
“FallBackToRsh”設定如果用ssh連接出現錯誤是否自動使用rsh。
UseRsh no
“UseRsh”設定是否在這臺計算機上使用“rlogin/rsh”。
BatchMode no
“BatchMode”如果設為“yes”,passphrase/password(互動式輸入口令)的提示將被禁止。當不能互動式輸入口令的時候,這個選項對指令碼檔案和批處理任務十分有用。
CheckHostIP yes
“CheckHostIP”設定ssh是否檢視連線到伺服器的主機的IP地址以防止DNS欺騙。建議設定為“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”如果設定成“yes”,ssh就不會自動把計算機的密匙加入“$HOME/.ssh/known_hosts”檔案,並且一旦計算機的密匙發生了變化,就拒絕連線。
IdentityFile ~/.ssh/identity
“IdentityFile”設定從哪個檔案讀取使用者的RSA安全驗證標識。
Port 22
“Port”設定連線到遠端主機的埠。
Cipher blowfish
“Cipher”設定加密用的密碼。
EscapeChar ~
“EscapeChar”設定escape字元。

/etc/ssh/sshd_config:介紹


Port 22
“Port”設定sshd監聽的埠號。
ListenAddress 192.168.1.1
“ListenAddress”設定sshd伺服器繫結的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”設定包含計算機私人密匙的檔案。
ServerKeyBits 1024
“ServerKeyBits”定義伺服器密匙的位數。
LoginGraceTime 600
“LoginGraceTime”設定如果使用者不能成功登入,在切斷連線之前伺服器需要等待的時間(以秒為單位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”設定在多少秒之後自動重新生成伺服器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被截獲的資訊。
PermitRootLogin no
“PermitRootLogin”設定root能不能用ssh登入。這個選項一定不要設成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”設定驗證的時候是否使用“rhosts”和“shosts”檔案。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”設定ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略使用者的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”設定ssh在接收登入請求之前是否檢查使用者家目錄和rhosts檔案的許可權和所有權。這通常是必要的,因為新手經常會把自己的目錄和檔案設成任何人都有寫許可權。
X11Forwarding no
“X11Forwarding”設定是否允許X11轉發。
PrintMotd yes
“PrintMotd”設定sshd是否在使用者登入的時候顯示“/etc/motd”中的資訊。
SyslogFacility AUTH
“SyslogFacility”設定在記錄來自sshd的訊息的時候,是否給出“facility code”。
LogLevel INFO
“LogLevel”設定記錄sshd日誌訊息的層次。INFO是一個好的選擇。檢視sshd的man幫助頁,已獲取更多的資訊。
RhostsAuthentication no
“RhostsAuthentication”設定只用rhosts或“/etc/hosts.equiv”進行安全驗證是否已經足夠了。
RhostsRSAAuthentication no
“RhostsRSA”設定是否允許用rhosts或“/etc/hosts.equiv”加上RSA進行安全驗證。
RSAAuthentication yes
“RSAAuthentication”設定是否允許只有RSA安全驗證。
PasswordAuthentication yes
“PasswordAuthentication”設定是否允許口令驗證。
PermitEmptyPasswords no
“PermitEmptyPasswords”設定是否允許用口令為空的帳號登入。
AllowUsers admin
“AllowUsers”的後面可以跟著任意的數量的使用者名稱的匹配串(patterns)或user@host這樣的匹配串,這些字串用空格隔開。主機名可以是DNS名或IP地址。

將SSH2相容格式的公鑰轉換成為Openssh相容格式

ssh-keygen -i -f Identity.pub >> /root/.ssh/authorized_keys2

相關推薦

linux ssh 使用深度解析key登入

ssh介紹 SSH全稱Secure SHell,顧名思義就是非常安全的shell的意思,SSH協議是IETF(Internet Engineering Task Force)的Network Working Group所制定的一種協議。SSH的主要目的是用來取

Linux --- SSH遠端登陸配置sshd_config檔案

ssh是linux遠端登入的安全協議,是 C/S 模式的架構,配置檔案分為伺服器端配置檔案 [/etc/ssh/sshd_config] 與客戶端配置檔案預設配置檔案[/etc/ssh/ssh_config] 使用者配置檔案[~/.ssh/config]  sshd_conf

動圖通過 User-Agent 識別爬蟲的原理、實踐與對應的繞過方法

開篇 隨著 Python 和大資料的火熱,大量的工程師蜂擁而上,爬蟲技術由於易學、效果顯著首當其衝的成為了大家追捧的物件,爬蟲的發展進入了高峰期,因此給伺服器帶來的壓力則是成倍的增加。企業或為了保證服務的正常運轉或為了降低壓力與成本,不得不使出各種各樣的技術手段來阻止爬蟲工程師們毫無節制的

教程多圖如何在Eclipse中離線安裝ADT(Android Development Tools)

1. 背景 本來正常情況的話,去下載整合好ADT的Eclipse,就可以直接使用了: 但是呢,(有人)有時候,是本身已經有了Eclipse了,是需要(通過Eclipse)線上下載和安裝ADT的。 結果就遇到了這種問題: 即,在輸入了: 結果死掉了,處

機器學習KNN分類的概念、誤差率及其問題

勿在浮沙築高臺 KNN概念         KNN(K-Nearest Neighbors algorithm)是一種非引數模型演算法。在訓練資料量為N的樣本點中,尋找最近鄰測試資料x的K個樣本,然

js事件js事件封裝函式,js跨瀏覽器事件處理機制

一、事件流 事件流描述的是從頁面中接受事件的順序。 IE的事件流是事件冒泡流,而Netscape的事件流是事件捕獲流 1、事件冒泡 事件冒泡,即事件最開始由最具體的元素(文件中巢狀層次最深的那個節點)接收,然後逐級向上轉播至最不具體的節點(文件)。 2、事件捕獲 事件捕獲的

機器學習無約束優化問題:梯度下降、牛頓法、擬牛頓法

無約束優化問題是機器學習中最普遍、最簡單的優化問題。 x∗=minxf(x),x∈Rn 1.梯度下降 梯度下降是最簡單的迭代優化演算法,每一次迭代需求解一次梯度方向。函式的負梯度方向代表使函式值減小最快的方向。它的思想是沿著函式負梯度方向移動逐步逼

Git使用使用Egit克隆專案到本地圖解

第一步:   開啟Eclipse的Git檢視,在檢視中單擊"Clone a Git repository" 如圖:      第二步:在彈出的Clone Git Repository介面中輸入要克隆

HTTP協議 (三) 壓縮 之前寫過一個篇 HTTP協議 ,這次繼續介紹HTTP協議中的壓縮。 本文會使用Fiddler來檢視HTTP request和Response, 如果不熟悉這個工

之前寫過一個篇 【HTTP協議詳解】 ,這次繼續介紹HTTP協議中的壓縮。 本文會使用Fiddler來檢視HTTP request和Response, 如果不熟悉這個工具,可以先參考[Fiddler教程] HTTP壓縮是指: Web伺服器和瀏覽器之間壓縮傳輸的”文字內容“的方法。 HTTP採用通用的壓縮演算

STM32 IICstm32 IIC從機模式(中斷方式收發資料)

1、IIC簡介 第二節程式碼會用到該部分內容,對於IIC來說,從機是不能主動傳送資料的,開始條件都是由主機生成。   1.1、主機發送資料流程   1) 主機在檢測到匯流排為“空閒狀態”(即 SDA、SCL 線均為高電平)時,傳送一個啟動訊號

資料庫正規化1NF-BCNF

關係型資料庫,由於資料分別儲存在不同的表中,因此設計不當就會造成嚴重的資料冗餘。 而如果表的粒度設計得太小,又會放大關係型資料庫讀寫很慢的缺點,表的連線操作會帶來很大的開銷。 因此在設計庫表時,有1NF、2NF、3NF、BCNF、4NF、5NF這些正規化,從前到後要求依次提

機器學習SMO演算法剖析

CSDN−勿在浮沙築高臺 本文力求簡化SMO的演算法思想,畢竟自己理解有限,無奈還是要拿一堆公式推來推去,但是靜下心看完本篇並隨手推導,你會迎刃而解的。推薦參看SMO原文中的虛擬碼。 1.SMO概念 上一篇部落格已經詳細介紹了SVM原理,為了方便求解,把原

機器學習線性迴歸、梯度下降、最小二乘的幾何和概率解釋

線性迴歸 即線性擬合,給定N個樣本資料(x1,y1),(x2,y2)....(xN,yN)其中xi為輸入向量,yi表示目標值,即想要預測的值。採用曲線擬合方式,找到最佳的函式曲線來逼近原始資料。通過使得代價函式最小來決定函式引數值。 採用斯坦福大學公開課的

QML實現可定製模態對話方塊核心部分

轉自 http://blog.csdn.net/r5014/article/details/70139689  

Linux系統編程---dup和dup2

系統 強調 操作 attach bsp ads 正常的 註意 tdi 正常的文件描述符: 在linux下,通過open打開以文件後,會返回一個文件描述符,文件描述符會指向一個文件表,文件表中的節點指針會指向節點表。看下圖: 打開文件的內核數據結構 dup和dup2兩

linuxlinux命令:fdisk -l 顯示資訊

目錄 一、fdisk -l  二、磁碟計算公式 三、參考博文 一、fdisk -l  fdisk -l (1)Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors

Linux下tar命令

tar命令用於建立、還原備份檔案,它可以加入、解開備份檔案內的檔案。 引數 帶有*號的為常用的引數 . -A 新增壓縮檔案到已存在的壓縮包 . -c 建立新的壓縮檔案* . -d 記錄檔案的差別 . -r 向壓縮檔案的末尾追加檔案 . -u 更新原壓縮包中的檔案,新增改變了的現有檔案到已

H.264/AVC視訊編解碼技術二十二、熵編碼(7):語法元素的CABAC解析

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼的形式操作一遍,才能對視訊壓

H.264/AVC視訊編解碼技術十二、解析H.264碼流的巨集塊結構(上)

《H.264/AVC視訊編解碼技術詳解》視訊教程已經在“CSDN學院”上線,視訊中詳述了H.264的背景、標準協議和實現,並通過一個實戰工程的形式對H.264的標準進行解析和實現,歡迎觀看! “紙上得來終覺淺,絕知此事要躬行”,只有自己按照標準文件以程式碼

Linux SSh scp使用遠端檔案/目錄的傳輸

# scp -r  [email protected]:/user/local/  /home/test/ r 引數表示遞迴複製(即複製該目錄下面的檔案和目錄);[email protected] 表示使用root使用者登入遠端伺服器www.vpser.net,:/user/local