一、遠程登錄方法
SSH 是一種安全通道協議 , 主要用來遠程登錄。在 RHEL 5 系統中使用的是 OpenSSH 服務器由 openssh , openssh-server 等軟件包提供的 ( 默認已經安裝 ) ,並以將 sshd 添加為標准的系統服務。 使用方法如下:
復制代碼代碼如下:
$ ssh host
$ ssh <a href="mailto:username@host">username@host</a>
$ ssh -p 222 <a href="mailto:username@host">username@host</a>
-p: 指定訪問端口 ; 如果省略該參數 , 則默認訪問 SSH 服務的默認端口 22;
如果是第一次登錄對方主機 , 則系統會出現一下提示 :
復制代碼代碼如下:
The authenticity of host 'host(192.168.0.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
這段話是說,無法確認 host 主機的真實性,只知道它的公鑰指紋,問你還想繼續連接嗎?
輸入 yes 之後,系統會出現一句提示,表示 host 主機已經得到認可。
復制代碼代碼如下:Warning: Permanently added 'host, 192.168.0.21 ' (RSA) to the list of known hosts.
然後要求輸入密碼:
復制代碼代碼如下:
$ Password: (enter password)
此時,如果秘密正確,就可以登錄了。
二、無密碼登錄方法
在信任環境下,如果每次遠程登錄時,都要輸入密碼,感覺太浪費時間了,尤其是密碼很復雜、維護的服務器比較多的情況下。
於是有了正常需求:不用輸入密碼即可實現遠程登錄。
實現步驟如下:
1 、本地生成 一對秘鑰文件 ( 公鑰和私鑰 ) ;
復制代碼代碼如下:
$ ssh-keygen
# 以上命令等價於 ssh-keygen -t rsa
#-t: 指定密鑰的類型 , 默認為 SSH-2 的 rsa 類型 ;
運行上面的命令後,系統會出現一系列提示,可以一路回車。 特別說明 ,其中有一個問題是, 要不要對私鑰設置口令( passphrase ) ,如果擔心私鑰的安全,可以設置一個。運行結束以後,會在 ~/.ssh/ 目錄下新生成兩個文件: id_rsa.pub 和 id_rsa 。前者公鑰,後者是私鑰。
2 、將公鑰傳送到遠程主機 host 上面 ;
復制代碼代碼如下:$ ssh-copy-id <a href="mailto:user@host">user@host</a>
經過以上兩步之後,就可以實現無密碼遠程登錄了 ( 遠程主機將用戶的公鑰保存在 ~/.ssh/authorized_keys 文件中 ) 。
三、常見問題:
1、 生成密鑰並上傳至遠程主機後,仍然無法實現無密碼登錄?
打開遠程主機的 /etc/ssh/sshd_config 這個文件,以下幾行取消注釋。
復制代碼代碼如下:
#RSAAuthentication=yes
#PubkeyAuthentication=yes
#AuthorizedKeysFile=.ssh/authorized_keys
然後,重啟遠程主機的 ssh 服務。
復制代碼代碼如下:
#ubuntu 系統
$ service ssh restart
#debian 系統
$ /etc/init.d/ssh restart
2 、執行 ssh-copy-id 命令時,遠程服務器的 SSH 服務端口不是 22 ,如下:
復制代碼代碼如下:$ ssh-copy-id <a href="mailto:nameB@machineB">nameB@machineB</a>
ssh: connect to host machineB port 22: Connection refused
則使用如下命令:
復制代碼代碼如下:
$ ssh-copy-id "-p 22000 <a href="mailto:nameB@machineB">nameB@machineB</a>"
四、補充內容:
復制代碼代碼如下:
$ ssh-copy-id -i ~/.ssh/id_rsa.pub <a href="mailto:[email protected]">[email protected]</a>
$ ssh-copy-id -u eucalyptus -i /home/ eucalyptus/.ssh/id_rsa.pub <a href="mailto:eucalyptus@remote_host">eucalyptus@remote_host</a>
#-u : 給 eucalyptus 用戶 設置 無密碼登陸
# -i : 當沒有值傳遞時或 ~/.ssh/identity.pub 文件不可訪問 ( 不存在 ) ,ssh-copy-id 將顯示 如下錯誤
/usr/bin/ssh-copy-id: ERROR: No identities found
SSH 提供兩種方式的登錄驗證:
1 、密碼驗證:以服務器中本地系統用戶的登錄名稱,密碼進行驗證。
2 、秘鑰對驗證:要求提供相匹配的秘鑰信息才能通過驗證。通常先在客戶機中創建一對秘鑰文件 ( 公鑰和私鑰 ) ,然後將公鑰文件放到服務器中的指定位置。
注意:當密碼驗證和私鑰驗證都啟用時,服務器將優先使用秘鑰驗證。
五、SSH服務的配置文件 :
sshd 服務的配置文件默認在 /etc/ssh/sshd_config ,正確調整相關配置項,可以進一步提高 sshd 遠程登錄的安全性。
配置文件的內容可以分為以下三個部分:
復制代碼代碼如下:
#SSH服務器監聽的選項
#監聽的端口
Port 22
#使用SSH V2協議
Protocol 2
#監聽的地址為所有地址
ListenAdderss 0.0.0.0
#//禁止DNS反向解析
UseDNS no</p> <p>#用戶登錄控制選項
#是否允許root用戶登錄
PermitRootLogin no
#是否允許空密碼用戶登錄
PermitEmptyPasswords no
#登錄驗證時間(2分鐘)
LoginGraceTime 2m
#最大重試次數
MaxAuthTries 6
#只允許user用戶登錄,與DenyUsers選項相反
AllowUsers user</p> <p>#登錄驗證方式
#啟用密碼驗證
PasswordAuthentication yes
#啟用秘鑰驗證
PubkeyAuthentication yes
#指定公鑰數據庫文件
AuthorsizedKeysFile .ssh/authorized_keys
查看 SSH 服務狀態命令: /etc/init.d/sshd status
重新啟動 SSH 服務命令: /etc/init.d/sshd restart
查看 ssh 軟件的版本號命令: $ ssh -V
OpenSSH_3.9p1, OpenSSL 0.9.7a Feb 19 2003 # 表明該系統正在使用 OpenSSH
ssh: SSH Secure Shell 3.2.9.1 (non-commercial version) on i686-pc-linux-gnu # 表明該系統正在使用 SSH2
當遠程主機的公鑰被接受以後,它就會被保存在文件 $HOME/.ssh/known_hosts 之中。下次再連接這台主機,系統就會認出它的公鑰已經保存在本地了,從而跳過警告部分,直接提示輸入密碼。
每個 SSH 用戶都有自己的 known_hosts 文件,此外系統也有一個這樣的文件,通常是 /etc/ssh/ssh_known_hosts ,保存一些對所有用戶都可信賴的遠程主機的公鑰。