在腾讯云上买了个云服务器,开始的时候用的ssh user@ip 进行登录,但是每次都需要输入登录密码,于是在网上查找怎么免密登录,避免以后走弯路。

改环境是mac下免密登录ubuntu,且mac下已经有多个ssh配置。

生成公钥和秘钥

1
2
cd ~/.ssh
ssh-keygen -t rsa -f ~/.ssh/server

因为已经有多个ssh配置,所以生成一个server的配置,这样在~/.ssh目录下生成server的密钥和server.pub公钥
打开~/.ssh文件夹下config文件,没有就创建一个,加上下面这句

1
2
3
4
Host server
HostName hostName
User user
IdentityFile ~/.ssh/server

hostName为你要登录的服务器IP,user为你要登录的user名称。
再执行如下命令

1
ssh-add ~/.ssh/server

上面这句话是把专有密钥添加到ssh-agent高速缓存中。

上传公钥到服务器

1
scp ~/.ssh/server.pub user@ip:~/.ssh/

将本机生成的公钥上传到你要登录的服务器上,因为mac上没有ssh-copy-id,故使用scp,而且网上下了ssh-copy-id也对mac不好使。

服务器操作

1
2
3
4
cd ~/.ssh
cat server.pub >> authorized_keys
chmod 600 authorized_keys
chmod u+xr,go-rwx ~/.ssh // chmod 700 ~/.ssh

将上传的公钥添加到authorized_keys文件的末尾,没有该文件则自己建立一个新的文件。

1
vi /etc/ssh/sshd_config

修改该文件,打开authorized_keys,找到类似该条~#AuthorizedKeysFile.ssh/authorized_keys~删除注释,有可能该文件是readonly,我是这么解决退出编辑模式时输入

1
:w !sudo tee %

重启ssh:

1
service sshd restart

总结

一开始笔者一直不成功,有如下原因

  1. 因为已经配置多个ssh,需要自己往config文件添加ssh信息,并且ssh-add
  2. 权限不对authorized_keys为600,ssh文件夹为700
  3. 没有开启authorized_keys
  4. 没有重启ssh