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

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

$ ssh hostlinux

$ ssh username@host 數據庫

$ ssh -p 222 username@host ubuntu

-p:指定訪問端口;若是省略該參數,則默認訪問SSH服務的默認端口22;安全

若是是第一次登陸對方主機,則系統會出現一下提示:服務器

The authenticity of host 'host(192.168.0.21)' can't be established.ssh

RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.ide

Are you sure you want to continue connecting (yes/no)?spa

這段話是說,沒法確認host主機的真實性,只知道它的公鑰指紋,問你還想繼續鏈接嗎?.net

輸入yes以後,系統會出現一句提示,表示host主機已經獲得承認。

Warning: Permanently added 'host,192.168.0.21' (RSA) to the list of known hosts.

而後要求輸入祕密:

$ Password: (enter password)

此時,若是祕密正確,就能夠登陸了。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

在信任環境下,若是每次遠程登陸時,都要輸入密碼,感受太浪費時間了,尤爲是密碼很複雜、維護的服務器比較多的狀況下。

因而有了正常需求:不用輸入密碼便可實現遠程登陸。

實現步驟以下:

一、本地生成一對祕鑰文件(公鑰和私鑰);

$ ssh-keygen

#以上命令等價於 ssh-keygen -t rsa

#-t:指定密鑰的類型,默認爲SSH-2 的rsa類型;

運行上面的命令後,系統會出現一系列提示,能夠一路回車。特別說明,其中有一個問題是,要不要對私鑰設置口令(passphrase),若是擔憂私鑰的安全,能夠設置一個。運行結束之後,會在 ~/.ssh/ 目錄下新生成兩個文件:id_rsa.pubid_rsa。前者公鑰,後者是私鑰。

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

$ ssh-copy-id user@host

通過以上兩步以後,就能夠實現無密碼遠程登陸了(遠程主機將用戶的公鑰保存在~/.ssh/authorized_keys文件中)。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

常見問題:

一、生成密鑰並上傳至遠程主機後,仍然沒法實現無密碼登陸?

打開遠程主機的 /etc/ssh/sshd_config 這個文件,如下幾行取消註釋。

#RSAAuthentication=yes

#PubkeyAuthentication=yes

#AuthorizedKeysFile=.ssh/authorized_keys

而後,重啓遠程主機的ssh服務。

#ubuntu系統

$ service ssh restart

#debian系統

$ /etc/init.d/ssh restart

二、執行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"

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

\

 

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

補充內容:

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.0.2

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

#-u:給eucalyptus用戶設置無密碼登錄

#-i:當沒有值傳遞時或 ~/.ssh/identity.pub 文件不可訪問(不存在),ssh-copy-id將顯示以下錯誤

/usr/bin/ssh-copy-id: ERROR: No identities found

SSH提供兩種方式的登陸驗證:

一、密碼驗證:以服務器中本地系統用戶的登陸名稱,密碼進行驗證。

二、祕鑰對驗證:要求提供相匹配的祕鑰信息才能經過驗證。一般先在客戶機中建立一對祕鑰文件(公鑰和私鑰),而後將公鑰文件放到服務器中的指定位置。

注意:當密碼驗證和私鑰驗證都啓用時,服務器將優先使用祕鑰驗證。

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,保存一些對全部用戶均可信賴的遠程主機的公鑰。

相關文章
相關標籤/搜索