分享 [解决] 无密码登陆 VPS

vincent178 · 2013年08月17日 · 最后由 blacktulip 回复于 2013年08月17日 · 4463 次阅读

Update: 分享一点东西,学到最多的是楼主呀。谢谢@yesmeck @046569 @doitian @xiaoronglv @blacktulip @bhuztez 论分享的重要性!!!

我也是边学变弄,折腾服务器的管理,感觉要学东西的好多。学了一点就赶紧记录下来,和大家一起分享。

通常登陆服务器我们都是通过 SSH 的方式。

SSH 提供了口令和密钥两种用户验证方式,这两者都是通过密文传输数据的,不同的是,口令用户验证方式传输的是用户的账户名和密码,这要求输入的密码具有足够的复杂度才能具有更高的安全性。而基于密钥的安全验证必须为用户自己创建一对密钥,并把共有的密钥放在需要访问的服务器上。当需要连接到 SSH 服务器上时,客户端就会向服务器发出请求,请求使用客户端的密钥进行安全验证。服务器收到请求之后,先在该用户的根目录下寻找共有密钥,然后把它和发送过来的公有密钥进行比较。如果两个密钥一致,服务器就用公有的密钥加密“质询”,并把它发送给客户端。客户端收到质询之后,就可以用本地的私人密钥解密再把它发送给服务器。这种方式是相当安全的。

通过密钥登陆 SSH 需要两个部分的设置。

服务器端

通过 ssh-keygen 生成一对密钥,-f 是指定 key-file这部分应该在客户端完成!!!

deploy@li610-92:~$ ssh-keygen -f ~/.ssh/blog Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/deploy/.ssh/blog. Your public key has been saved in /home/deploy/.ssh/blog.pub. The key fingerprint is: 24:36:f6:de:92:c0:14:c8:f0:18:3f:0d:94:49:00:15 deploy@li610-92 The key's randomart image is: +--[ RSA 2048]----+ |.oEB++. | | ==o . | | . + B . | | * = | | o S | | o o | | + . | | . | | |

一路回车下来,密钥就生成了。然后将生成的公钥加入 authorized_keys 文件中。

$ cp ~/.ssh/blog.pub ~/.ssh/authorized_keys

下面就是将私钥传输回你自己的电脑,我一般使用的是 sftp.通过 sftp 登陆你的 VPS,

$ get ~/.ssh/blog .ssh/

这样服务器端的设置基本完成了。这时,你可以删除掉~/.ssh/blog 这个文件了。

客户端

客户端主要是配置你的 ssh config 文件。

$ touch ~/.ssh/config $ vim ~/.ssh/config $ Host demo HostName YOUR_HOSTNAME User YOUR_HOSTUSERNAME IdentityFile ~/.ssh/blog

这样,大功告成。

尝试一下

$ ssh demo

就可以成功登陆了。

下一篇应该会涉及 ssh 登陆的其他安全问题。

完全反掉了吧。。。

# 在本地生成公私钥
$ ssh-keygen
# 把公钥放到服务器上
$ ssh-copy-id [email protected]

#1 楼 @yesmeck 好像是呀,在本地生成的公私钥会更好。。。 = =!!!

知错就改善莫大焉,分享的同时也会收获很多。

cp ~/.ssh/blog.pub ~/.ssh/authorized_keys

Bang! 之前设置的 pub key 全没了。

另外一个有用的是 ssh agent,这样你可以给 key 设置个 passphrase 增加安全性但又不用每次去输入 passphrase。而且通过 ssh agent forward,可以实现在登录服务器后,仍然使用本机的 key,好处是部署的时候,不用把服务器的 key 加到像 github 这样的服务中去。这样服务器被黑,别人也没法访问你的 github

记得把.ssh 文件夹的权限改为 744,authorized_keys 改为 644

为了安全,顺便把密码登录关掉。

#5 楼 @xiaoronglv key 的权限应该是 400 吧

#6 楼 @blacktulip 你太严格了,CentOS 也才推荐 600

http://wiki.centos.org/HowTos/Network/SecuringSSH

实际上,StrictMode 只要求下面这样 (待确认,凭印象写的)

700 ~
755 ~/.ssh
644 ~/.ssh/authorized_keys 

#7 楼 @bhuztez 我可能记错了,也许是私钥应该 400 …

#8 楼 @blacktulip Server 上也不该放私钥吧

#9 楼 @bhuztez 当然,我说的是 client 这边,我记得有几次连服务器的时候说某个钥的权限太开放不让我连,现在想起来应该是私钥

需要 登录 后方可回复, 如果你还没有账号请 注册新账号