blog icon indicating copy to clipboard operation
blog copied to clipboard

使用 root 用户登陆到腾讯云的主机

Open lmk123 opened this issue 7 years ago • 14 comments

前段时间趁腾讯云做活动的时候买了个低配的主机,想了想总不能拿来吃灰吧,所以决定在主机上装个 Docker 玩玩。腾讯云默认提供的账户是 ubuntu,安装 Docker 总是需要敲 sudo,所以我想直接用 ssh 连接到 root 用户,没想到踩了很长时间的坑,这里写个流水账记录一下过程。

第一步:配置使用密匙登陆到主机

从网页登陆到主机无法方便的复制文件到主机里,所以我使用了密匙登陆的方式,这个步骤比较简单:

  1. 创建一对密匙。在腾讯云的控制台里创建密匙时有两种选择,一种是让腾讯云帮你生成一对密匙,然后你下载私匙;另一种是自己在电脑上创建一对密匙,然后将公匙提供给腾讯云。
  2. 创建完后,将密匙关联到主机。这一步其实就是将公匙写入了主机的 /home/ubuntu/.ssh/authorized_keys 文件中。
  3. 如果你选择让腾讯云生成密匙,那还需要将下载的私匙放到当前登陆账户的 .ssh 文件夹下:mv path/to/id_rsa_test ~/.ssh 并且修改文件权限 chmod 600 ~/.ssh/id_rsa_test,否则会报“Permissions 0777 for '/Users/username/.ssh/id_rsa_test' are too open.”的错误。
  4. 写一段配置将私匙用于腾讯云的服务器,这样做是为了针对不同的主机使用不同的私匙。运行 vim ~/.ssh/config 并添加如下配置:
# xxx 为主机的 IP 地址
Host xxx.xxx.xxx.xxx
HostName xxx.xxx.xxx.xxx
Port 22
User ubuntu
IdentityFile ~/.ssh/id_rsa_test

走完上面的步骤之后,运行 ssh xxx.xxx.xxx.xxx 就可以连接到你的主机了。

第二步:为 root 账户设置密码

刚买的主机是没有给 root 账户设置密码的,但也很简单,使用 ubuntu 账户运行 sudo passwd 设置密码就可以了,之后你就可以运行 su 从 ubuntu 切换到 root 了,但是每次切换的时候都需要输入密码。

第三步:直接用 root 登陆到主机

这一步一直不成功,花了我很长时间。

网上给出的方案非常简单。登陆到主机后:

  1. 运行 sudo vim /etc/ssh/sshd_config
  2. PermitRootLogin 的值改为 yes,然后保存并退出
  3. 运行 service ssh restart 重启 sssh 服务

但是我用这种方式登陆时报错了:

$ ssh [email protected] -vvv
...
debug2: we sent a publickey packet, wait for reply
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
[email protected]: Permission denied (publickey)

我先是登陆到主机上查看了日志:tac /var/log/auth.log | grep sshd,最新的一条显示 Connection closed by xxx.xxx.xx.xx [preauth],其中 xxx 是我本地电脑的 IP 地址,所以这说明连接是被我本地电脑关闭的。

然后我开始 Google,先搜索 permission denied publickey,得到的内容都是关于用 ssh 连接 GitHub 的报错,原因是没有将公匙添加到 GitHub 中。但是我的公匙已经由腾讯云添加过了,所以不应该是这个原因导致的。

然后我开始搜索 we did not send a packet, disable method,这下就五花八门了,大多都是跟权限有关,包括:

  • 当前用户目录 ~ 的权限
  • 用户目录下的 .ssh 文件夹 ~/.ssh 的权限
  • ~/.ssh/authorized_keys 文件的权限

我一条条比对了这三个文件(夹)的权限,为此还顺便了解了一下 Linux 的权限,但是一一比对后发现主机上的权限都是对的,我也是在这个过程中才知道腾讯云把我关联的公匙放在了 /home/ubuntu/.ssh/authorized_keys 里。

一晚上过去了,能折腾的办法都折腾了,还是不能用 root 账户登陆上去,只能用 ubuntu 登陆上去之后通过 su 切换到 root。折腾一番后我又回想了我整个折腾的过程,突然想到一点:腾讯云把我的公匙放在了 /home/ubuntu/.ssh/authorized_keys 是不是意味着只能用 ubuntu 用户登陆?如果要登陆到 root 是不是也要将公匙放在 /root/.ssh/authorized_keys 下?

我切换到 root 用户,检查了一下 /root/.ssh/authorized_keys 文件是空的。于是我运行 cat /home/ubuntu/.ssh/authorized_keys >> /root/.ssh/authorized_keys 将 ubuntu 的公匙写进了 root 里,再在电脑上用 root 登陆……就成功了!

总结

在尝试登陆时还遇到一个错误:[email protected]: Connection reset by peer.。一开始以为是公司网络的问题,但让同事试着登陆腾讯云的主机却没有问题,为此我还提交了工单,结果晚上回家后在家登陆就成功了 :joy:

回过头来看了一下,我想我还是应该买本书学习一下 Linux 系统了 :joy:

lmk123 avatar Apr 23 '18 16:04 lmk123

卧槽我也碰到这个问题,想用 root 用户来登录服务器,默认给的 ubuntu 的居然没给到 root 权限,真是令人窒息的操作。

kinglisky avatar Sep 03 '18 15:09 kinglisky

kao,终于找到原因了。跟楼主一样折腾了半天,原来密钥在ubuntu目录。

Xavier1989 avatar Nov 05 '18 09:11 Xavier1989

感谢感谢,腾讯云竟然搜不到一点解决方案

kidultx avatar Jun 04 '19 07:06 kidultx

断断续续折腾挺久了,非常感谢楼主的解决方案!

horizon98 avatar Feb 16 '20 12:02 horizon98

把这一项 #PasswordAuthentication yes 打开,PermitRootLogin 设为 yes 就可以密码登录了

cjqpker avatar Nov 18 '20 09:11 cjqpker

cat /home/ubuntu/.ssh/authorized_keys >> /root/.ssh/authorized_keys 这个步骤能否再详细点? 小白弄不出来,就差这么一下了。后面不会用这个配置的服务器了,弄了一下午。

pinguinPeter avatar Jun 06 '21 14:06 pinguinPeter

cat /home/ubuntu/.ssh/authorized_keys >> /root/.ssh/authorized_keys 这个步骤能否再详细点? 小白弄不出来,就差这么一下了。后面不会用这个配置的服务器了,弄了一下午。

@pinguinPeter 要先按照第二步设置密码,然后输入 su 命令切换成root账户,才有编辑 root/.ssh/authorized_keys 这个文件的权限(即输入那条 cat 命令)。

总之就是腾讯云默认只配置了 ubuntu 这个账户的公钥,没有配置root这个账户的公钥,所以无法使用密钥直接登录 root 账户。所以需要手动将公钥添加到 root/.ssh/authorized_keys 这个文件里。

horizon98 avatar Jun 06 '21 15:06 horizon98

cat /home/ubuntu/.ssh/authorized_keys >> /root/.ssh/authorized_keys 这个步骤能否再详细点? 小白弄不出来,就差这么一下了。后面不会用这个配置的服务器了,弄了一下午。

@pinguinPeter 要先按照第二步设置密码,然后输入 su 命令切换成root账户,才有编辑 root/.ssh/authorized_keys 这个文件的权限(即输入那条 cat 命令)。

总之就是腾讯云默认只配置了 ubuntu 这个账户的公钥,没有配置root这个账户的公钥,所以无法使用密钥直接登录 root 账户。所以需要手动将公钥添加到 root/.ssh/authorized_keys 这个文件里。

issue 这样弄不出来,能否把操作步骤截个图出来下!谢谢

pinguinPeter avatar Jun 06 '21 23:06 pinguinPeter

cat /home/ubuntu/.ssh/authorized_keys >> /root/.ssh/authorized_keys 这个步骤能否再详细点? 小白弄不出来,就差这么一下了。后面不会用这个配置的服务器了,弄了一下午。

@pinguinPeter 要先按照第二步设置密码,然后输入 su 命令切换成root账户,才有编辑 root/.ssh/authorized_keys 这个文件的权限(即输入那条 cat 命令)。 总之就是腾讯云默认只配置了 ubuntu 这个账户的公钥,没有配置root这个账户的公钥,所以无法使用密钥直接登录 root 账户。所以需要手动将公钥添加到 root/.ssh/authorized_keys 这个文件里。

issue

这样弄不出来,能否把操作步骤截个图出来下!谢谢

@pinguinPeter 这样应该就可以了啊,更改过sshd_congig文件之后要记得要输入service sshd restart重启ssh服务。现在通过ssh用密钥应该是能登录root账号的,如果不能的话应该有报错或者提示的。

horizon98 avatar Jun 07 '21 04:06 horizon98

cat /home/ubuntu/.ssh/authorized_keys >> /root/.ssh/authorized_keys 这个步骤能否再详细点? 小白弄不出来,就差这么一下了。后面不会用这个配置的服务器了,弄了一下午。

@pinguinPeter 要先按照第二步设置密码,然后输入 su 命令切换成root账户,才有编辑 root/.ssh/authorized_keys 这个文件的权限(即输入那条 cat 命令)。 总之就是腾讯云默认只配置了 ubuntu 这个账户的公钥,没有配置root这个账户的公钥,所以无法使用密钥直接登录 root 账户。所以需要手动将公钥添加到 root/.ssh/authorized_keys 这个文件里。

issue 这样弄不出来,能否把操作步骤截个图出来下!谢谢

@pinguinPeter 这样应该就可以了啊,更改过sshd_congig文件之后要记得要输入service sshd restart重启ssh服务。现在通过ssh用密钥应该是能登录root账号的,如果不能的话应该有报错或者提示的。

ok

pinguinPeter avatar Jun 07 '21 04:06 pinguinPeter

确实有用!

yym68686 avatar Sep 15 '21 07:09 yym68686

这个配置起来就是坑

MikeJackOne avatar Aug 04 '22 07:08 MikeJackOne

很好的思路,我也解决了,谢谢

Lucas-cooperate avatar Jul 20 '23 06:07 Lucas-cooperate