ssh免密碼登入全過程
生成公鑰和私鑰
ssh-keygen
等同於ssh-keygen -t rsa
執行上面的命令後,系統會出現一系列提示,可以一路回車,例如:
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/glowd/.ssh/id_rsa): Enter
特別說明,要不要對私鑰設定口令(passphrase),如果擔心私鑰的安全,可以設定一個。沒有特殊需求直接Enter,為空
執行結束以後, 預設在 ~/.ssh目錄生成兩個檔案:
id_rsa :私鑰
id_rsa.pub :公鑰
2.匯入公鑰到認證檔案,更改許可權
匯入本機
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
匯入要免密碼登入的伺服器
首先將公鑰複製到遠端伺服器,使用者為glowd
scp {-P port} ~/.ssh/id_rsa.pub [email protected]:~
在伺服器上
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
在伺服器上更改許可權(必須)
chmod 755 ~ chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
以上執行之後,有些機器應該可以直接訪問了,可以測試一下
ssh {remote ip}
3.常見問題及解決方案
- 生成金鑰並上傳至遠端主機後,任然不可用
開啟伺服器的 /etc/ssh/sshd_config 這個檔案,取消註釋。
#AuthorizedKeysFile .ssh/authorized_keys
- 重啟伺服器的ssh服務。
#RHEL/CentOS系統
$ service sshd restart
#ubuntu系統
$ service ssh restart
#debian系統
$ /etc/init.d/ssh restart
- 執行ssh-copy-id 命令
ssh-copy-id [email protected] ip
`如果不是預設埠22,是9001`
ssh-copy-id -p 9001 [email protected] ip
- ssh連線遠端主機時,出現
sign_and_send_pubkey: signing failed: agent refused operation
錯誤,並且還是需要輸入密碼
表示ssh-agent 已經在運行了,但是找不到附加的任何keys,就是說你生成的key,沒有附加到ssh-agent上,需要附加一下,執行
- 檢視hosts中是否配置了git伺服器的地址,那樣的話,會一直讓你輸入密碼
ssh-add
`當然你也可以檢視附加了哪些key`
ssh-add -l
- 結果就可以了
ssh glowd@{remote ip}
`或者,使用9001埠`
ssh -p 9001 [email protected]{remote ip}
- 如果顯示下面的錯誤
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: POSSIBLE DNS SPOOFING DETECTED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The ECDSA host key for [git.bbdservice.net]:51668 has changed,
and the key for the corresponding IP address [10.10.80.26]:51668
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the ECDSA key sent by the remote host is
6e:92:c8:d6:f2:45:ae:ff:5f:1d:21:8b:01:52:8a:82.
Please contact your system administrator.
Add correct host key in /home/glowd/.ssh/known_hosts to get rid of this message.
Offending ECDSA key in /home/glowd/.ssh/known_hosts:1
remove with: ssh-keygen -f "/home/glowd/.ssh/known_hosts" -R [git.bbdservice.net]:51668
ECDSA host key for [git.bbdservice.net]:51668 has changed and you have requested strict checking.
Host key verification failed.
fatal: Could not read from remote repository.
說明你連線的那一行訪問,驗證已經改變,/home/glowd/.ssh/known_hosts:1,刪除那一行,或者直接把整個known_hosts檔案刪除,重新連線一次就好了
4.前面搞定了免密碼登入,想想也是很激動了。但是,還要寫ip,還要寫使用者名稱,是不是又有點不爽啦。搞定使用者名稱和埠號
找到 ~/.ssh/config 檔案,如果木有的話就自個兒建一個吧,內容如下:
Host {remote ip}
User {username}
Port {port}
- 現在連線就很簡單了
ssh {remote ip}
5.我現在已經可以ssh 到某臺機器,並且不用輸入使用者名稱,密碼了。但是我現在要使用github,或者github,怎麼辦了。
看網上有些人說,不同的賬號,要生成不同的公匙,私匙,也是有解決方案的
假設github,我的賬號是 [email protected]
$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/glowd/.ssh/id_rsa): {輸入你想要儲存密匙的檔名 假設id_rsa_github}
Enter passphrase (empty for no passphrase):{enter}
Enter same passphrase again:{enter}
Your identification has been saved in /home/glowd/.ssh/id_rsa_github.
Your public key has been saved in /home/glowd/.ssh/id_rsa_github.pub.
現在我們去/home/glowd/.ssh/目錄下,發現多了兩個檔案id_rsa_github和id_rsa_github.pub
但是此時如果你把id_rsa_github.pub的內容,拷貝到github的ssh key裡面去,然後連線github
ssh -T git@github.com
會發現結果是
Permission denied (publickey).
那是因為現在ssh還不能識別這個密匙-key
想要識別這個key也很簡單
ssh-add /home/glowd/.ssh/id_rsa_github
`如果你想檢視現在有那些key可以識別`
ssh-add -l
現在有你的key了,執行
ssh -T git@github.com
會顯示你成功通過驗證了並且登入,但是GitHub沒有提供shell訪問,意思不能使用登入後的命令列操作github
Hi Glowdable! You've successfully authenticated, but GitHub does not provide shell access.
- 現在好了,我有兩個key,一個ssh 伺服器,一個github。但是我們公司也有gitlab,那麼我還要再生成一個key,用gitlab的賬號嗎?
當然如果你願意是沒有問題,而且網上很多同學也是這樣說的,但是這是沒有道理的。
- 首先,我們生成的key,並不和賬號繫結,雖然我們看到,生成key時好像使用了賬號,其實那不是賬號,那只是comment-註釋。就是說,無論你寫什麼,都不會對生成的key產生影響
ssh-keygen -C "[email protected]"
- 那麼,我們看到最後生成的key裡面,是包含了這個comment的。這是事實,不過在驗證時,
[email protected]
後面的這部分是沒有作用的,你可以任意修改。
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZhsxICWPITRpvOTosjTmuo2osYAIet2DdjBZ/qoLcU6TZtrojIt17I48fYnm4eq9LI1jF7kG+ZwiuAuChRVl2VEOhGsgkk3xG10lQEpJt2RHSxaBfaVwu0BpwJ0bCaFIq/W73WxeWE2AzuG7/V+QjwtvBBQMFKrZ3nbgifgsndrT8KdE/pCGxuxgB5Xx5Y7mdAwxhHzseB9Yl+gCgstjMDe1FjTkRibQ9uQZKSoTKLxQZ+NZC7Ylniv21/CO105XwM0CF4wGlei0FE9bn7cs/1SNxM1Aae67eYADkfSvQIkRS6yvtJ4YxrZ9Xsdw7smy8kJ1wBqhDFMz1FMZp5oDh glowd@gmail.com
- 結論:金鑰不和任何comment繫結,任何地方使用都是一樣的,嚴格來說,如果沒有特殊需求,一個就夠了。系統預設在校驗的時候就會讀取
ssh-add -l
中key所對應的金鑰檔案