歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

Linux命令之遠程登錄/無密碼登錄-ssh,ssh-keygen,ssh-copy-id

SSH是一種安全通道協議,主要用來遠程登錄。在RHEL 5系統中使用的是OpenSSH服務器由openssh, openssh-server等軟件包提供的(默認已經安裝),並以將sshd添加為標准的系統服務。使用方法如下:

$ ssh host

$ ssh username@host

$ ssh -p 222 username@host

-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.pubid_rsa。前者公鑰,後者是私鑰。

2、將公鑰傳送到遠程主機host上面;

$ ssh-copy-id user@host

經過以上兩步之後,就可以實現無密碼遠程登錄了(遠程主機將用戶的公鑰保存在~/.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 nameB@machineB

ssh: connect to host machineB port 22: Connection refused

則使用如下命令:

$ ssh-copy-id "-p 22000 nameB@machineB"

3、ssh連接遠程主機時,出現 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED 警告。

分析原因:系統重裝、帳號信息修改等都會造成密鑰失效。
解決方法:刪除無效的密鑰,重新生成即可。
vi ~/.ssh/known_hosts
找到和遠程主機ip一致的密鑰,將其刪除即可。

補充內容:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

$ ssh-copy-id -u eucalyptus -i /home/eucalyptus/.ssh/id_rsa.pub eucalyptus@remote_host

#-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  
    
#用戶登錄控制選項  
#是否允許root用戶登錄  
PermitRootLogin no  
#是否允許空密碼用戶登錄  
PermitEmptyPasswords no  
#登錄驗證時間(2分鐘)  
LoginGraceTime 2m
#最大重試次數  
MaxAuthTries 6
#只允許user用戶登錄,與DenyUsers選項相反  
AllowUsers user  
    
#登錄驗證方式  
#啟用密碼驗證  
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,保存一些對所有用戶都可信賴的遠程主機的公鑰。

 

Copyright © Linux教程網 All Rights Reserved