linux下的ssh遠程登錄詳解

一般情況下,我們用ssh遠程登錄到服務器時,要輸入用戶名和密碼。這對經常維護系統的人來說,很麻煩。怎樣才能不用密碼直接登錄到遠程的linux/unix服務器呢?ssh公鑰認證可以解決這個問題。
公鑰認證,是使用一對加密字符串,一個稱爲公鑰(public key), 任何人都可以看到其內容,用於加密;另一個稱爲密鑰(private key),只有擁有者才能看到,用於解密。 通過公鑰加密過的密文使用密鑰可以輕鬆解密,但根據公鑰來猜測密鑰卻十分困難。
在使用公鑰認證之前,先檢查一下服務器的ssh配置文件/etc/ssh/sshd_config


RSAAuthentication yes # 啓用 RSA 認證,默認爲yes
PubkeyAuthentication yes # 啓用公鑰認證,默認爲yes


如果配置沒有問題,那麼你就可以進行下一步了。
下面我們舉個例子,比如有兩臺機器,客戶機A與服務器B,想用ssh公鑰認證方式從A機器用client用戶登錄到B機器的server用戶,方法如下:
1.在客戶機A上生成公鑰與密鑰
[client@test ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/client/.ssh/id_rsa): #此處直接按回車即可
Created directory ‘/home/client/.ssh’.
Enter passphrase (empty for no passphrase): #此處直接按回車即可
Enter same passphrase again: #此處直接按回車即可
Your identification has been saved in /home/client/.ssh/id_rsa.
Your public key has been saved in /home/client/.ssh/id_rsa.pub.
The key fingerprint is:
f5:30:ba:10:ee:7a:c6:cf:d8:ec:3f:4c:b3:f1:09:6d [email protected]
這樣就生成了client用戶在這臺機器的公鑰(/home/client/.ssh/id_rsa.pub )和私鑰(/home/client/.ssh/id_rsa).

2.將上一步生成的公鑰文件拷貝到服務器B上。然後將文件內容追加到server用戶目錄的.ssh/authorized_keys中:
[server@server]$ cat id_rsa.pub >> .ssh/authorized_keys
這樣,client用戶從客戶機上登錄到服務器的server用戶,就不用再輸入密碼了。
另外,如果對服務器安全性比較高的情況下,可以設置用戶只允許通過公鑰認證,禁止用戶用密碼方式登錄,只要修改一下服務器的配置文件/etc/sshd/sshd_config
PasswordAuthentication no
修改完後要重啓sshd服務。
這樣用戶通過密碼方式登錄時就會提示:
Permission denied (publickey,gssapi-with-mic)
有效的提高了系統的安全性。
注意:
.ssh 目錄的權限必須是0700
.ssh/authorized_keys 文件權限必須是0600
否則公鑰認證不會生效。

ssh_config和sshd_config都是ssh服務器的配置文件,二者區別在於,前者是針對客戶端的配置文件,後者則是針對服務端的配置文件。兩個配置文件都允許你通過設置不同的選項來改變客戶端程序的運行方式。下面列出來的是兩個配置文件中最重要的一些關鍵詞,每一行爲“關鍵詞&值”的形式,其中“關鍵詞”是忽略大小寫的。
1、編輯 /etc/ssh/ssh_config 文件

Site-wide defaults for various options

Host *
ForwardAgent no
ForwardX11 no
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
FallBackToRsh no
UseRsh no
BatchMode no
CheckHostIP yes
StrictHostKeyChecking no
IdentityFile ~/.ssh/identity
Port 22
Cipher blowfish
EscapeChar ~

下面對上述選項參數逐進行解釋:

Site-wide defaults for various options

帶“#”表示該句爲註釋不起作,該句不屬於配置文件原文,意在說明下面選項均爲系統初始默認的選項。說明一下,實際配置文件中也有很多選項前面加有“#”註釋,雖然表示不起作用,其實是說明此爲系統默認的初始化設置。
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,由於rsh並不安全,所以此選項應當設置爲"no”。
UseRsh no
"UseRsh"設置是否在這臺計算機上使用"rlogin/rsh",原因同上,設爲"no"。
BatchMode no
"BatchMode":批處理模式,一般設爲"no";如果設爲"yes",交互式輸入口令的提示將被禁止,這個選項對腳本文件和批處理任務十分有用。
CheckHostIP yes
"CheckHostIP"設置ssh是否查看連接到服務器的主機的IP地址以防止DNS欺騙。建議設置爲"yes"。
StrictHostKeyChecking no
"StrictHostKeyChecking"如果設爲"yes",ssh將不會自動把計算機的密匙加入"$HOME/.ssh/known_hosts"文件,且一旦計算機的密匙發生了變化,就拒絕連接。
IdentityFile ~/.ssh/identity
"IdentityFile"設置讀取用戶的RSA安全驗證標識。
Port 22
"Port"設置連接到遠程主機的端口,ssh默認端口爲22。
Cipher blowfish
“Cipher”設置加密用的密鑰,blowfish可以自己隨意設置。
EscapeChar ~
“EscapeChar”設置escape字符。
2、編輯 /etc/ssh/sshd_config 文件:

This is ssh server systemwide configuration file.

      Port 22
      ListenAddress 192.168.1.1
      HostKey /etc/ssh/ssh_host_key
      ServerKeyBits 1024
      LoginGraceTime 600
      KeyRegenerationInterval 3600
      PermitRootLogin no
      IgnoreRhosts yes
      IgnoreUserKnownHosts yes
      StrictModes yes
      X11Forwarding no
      PrintMotd yes
      SyslogFacility AUTH
      LogLevel INFO
      RhostsAuthentication no
      RhostsRSAAuthentication no
      RSAAuthentication yes
      PasswordAuthentication yes
      PermitEmptyPasswords no
      AllowUsers admin

下面逐行說明上面的選項設置:
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登錄。這個選項從安全角度來講應設成"no"。
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”的後面可以跟任意的數量的用戶名的匹配串,這些字符串用空格隔開。主機名可以是域名或IP地址。

通常情況下我們在連接 OpenSSH服務器的時候假如 UseDNS選項是打開的話,服務器會先根據客戶端的 IP地址進行 DNS PTR反向查詢出客戶端的主機名,然後根據查詢出的客戶端主機名進行DNS正向A記錄查詢,並驗證是否與原始 IP地址一致,通過此種措施來防止客戶端欺騙。平時我們都是動態 IP不會有PTR記錄,所以打開此選項也沒有太多作用。我們可以通過關閉此功能來提高連接 OpenSSH 服務器的速度。
服務端步驟如下:
編輯配置文件 /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
找到 UseDNS選項,如果沒有註釋,將其註釋
#UseDNS yes
添加
UseDNS no
找到 GSSAPIAuthentication選項,如果沒有註釋,將其註釋
#GSSAPIAuthentication yes
添加
GSSAPIAuthentication no
保存配置文件
重啓 OpenSSH服務器
/etc/init.d/sshd restart

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章