表現(xiàn)在兩個(gè)方面: ssh 登錄服務(wù)器
, 和通過(guò)ssh 使用 git
, 報(bào)的錯(cuò)都是Permissino denied (publickey)
git異常的解決
根據(jù)github文檔, 我可以解決第二個(gè)問(wèn)題, 第一個(gè)問(wèn)題(ssh login)解決后再來(lái)更新.
使用git出現(xiàn)問(wèn)題, 并不局限于 github, 我連 gitlab 也是一樣. 其實(shí)根據(jù)文檔一項(xiàng)項(xiàng)檢測(cè),我在ssh-add -l
這一句發(fā)現(xiàn)了問(wèn)題, 雖然我生成了密鑰, 但是它的輸出顯示我沒(méi)有私鑰, 照如下解決即可:
Tip: On most systems the default private keys (~/.ssh/id_rsa
, ~/.ssh/id_dsa and ~/.ssh/identity) are automatically added to the SSH authentication agent. You shouldn't need to runssh-add path/to/key
unless you override the file name when you generate a key.
也就是說(shuō), 把你的id_rsa文件手動(dòng)指定一下ssh_add 文件路徑
(不知道為什么會(huì)出這種鬼問(wèn)題)
SSH自動(dòng)登錄異常的解決
這是補(bǔ)充的內(nèi)容, 剛剛解決.
首先, 你登不上這是服務(wù)端的問(wèn)題, 沒(méi)有把你的公鑰寫(xiě)到~/.ssh/authorized_keys
里面去, 你想辦法把它寫(xiě)進(jìn)去(當(dāng)你 ssh
不上去的時(shí)候, scp
當(dāng)然也不行)
寫(xiě)進(jìn)去后, 仍然報(bào)錯(cuò), 我們繼續(xù)看日志:
ssh root@mydomain.com -v
或 ssh root@mydomain.com -vvv
(更詳細(xì)的日志)
通過(guò)看日志, 你可以一步步看到問(wèn)題:
...
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Trying private key: .ssh/id_rsa
debug3: no such identity: .ssh/id_rsa: No such file or directory
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
Permission denied (publickey).
注意截取的倒數(shù)第4行:
首先, 它昨天不是這么提示的, 它提示的是.ssh/id_rsd
, 我到配置文件里把它改成了rsa
, 因?yàn)槲疑傻氖?rsa
配置文件的地址是:
/etc/ssh/ssh_config
, 改的節(jié)點(diǎn)名是IdentityFile
其次, 順便看一下RSAAuthentication
和 PubkeyAuthentication
這兩項(xiàng)是不是 yes(如果是注釋狀態(tài), 不要?jiǎng)? 默認(rèn)是 yes)
這樣, 服務(wù)端有你的公鑰, 本地配置了 IdentityFile
路徑, 就可以登錄了, 但我一直沒(méi)成功的原因在于, 我在原配置文件改的, 它是路徑是.ssh/id_rsa,.ssh/id_rsd
, 我單純把 rsd 的去掉, 卻沒(méi)發(fā)現(xiàn)它的路徑是錯(cuò)的, 直到看了日志提示這個(gè)文件不存在, 才想起把格式改對(duì).
我碰到的情況不知道是不是個(gè)例, 比如同一個(gè)文件
UserKnownHostsFile ~/.ssh/known_hosts,~/.ssh/known_hosts2
這一行, 路徑格式卻是正確的, 匪夷所思.
總之, 你碰到Permission denied (public key)
這個(gè)問(wèn)題, 就結(jié)合 git 和 server 這兩情況, 看是沒(méi)有 identity, 還是 id_rsa路徑配錯(cuò)了. (前提是公鑰必須已經(jīng)寫(xiě)到服務(wù)器上去了)