目录

ubuntu启用root用户并允许ssh远程登录

# Ubuntu启用root用户并允许ssh远程登录

# 1.0 Ubuntu启用root用户并允许ssh远程登录开启root账户

新装的linux系统是没有root用户的

# 1.1开启root账户

sudo passwd root #开启root用户
1

# 1.2 设置root密码:

# ubuntu 20.04 LTS版本 
sudo passwd
 //提示:
 New password:
 Retype new password:
 passwd: password updated successfully
 
 su命令无法切换到root,提示su: Authentication failure
 需要先 `sudo passwd root` 一次,下次再su就OK
1
2
3
4
5
6
7
8
9

# 1.3允许ssh远程登录

#修改ssh配置文件改为root用户能通过SSH登录
编辑sshd_config   vim /etc/ssh/sshd_config
找到这行:PermitRootLogin prohibit-password
修改为:PermitRootLogin yes
#遇到
Permission denied (publickey).
生产机器默认禁用了ssh密码登录权限

#修改ssh配置文件改为允许ssh密码登录
登录目标机器 打开 /etc/ssh/sshd_config ,
修改PasswordAuthentication no 
为:
PasswordAuthentication yes
#还要再把port 端口打开
ssh默认连的是22端口
需要把port前面的注释去掉

#Host key verification failed.
是因为请求连接的机器本地没有连接被请求机器的密钥
ssh-keygen 用于生成、管理和转换认证密钥,包括 RSA 和 DSA 两种密钥。
ssh-keygen -R 你要访问的IP地址 #为请求的机器ip生成密钥
第一次需要输入密码,连接成功一次后再连接就不需要输入密码,因为在

#重启ssh
sudo service sshd restart
# 如果 unrecognized service。
#重启ssh服务
/etc/init.d/sshd restart
(或sudo /etc/init.d/ssh start)

#如果还是连接失败,就重启ssh服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 2.0 ssh

2.1 ubuntu (opens new window)默认并没有安装ssh服务,如果通过ssh链接ubuntu,需要自己手动安装ssh-server。判断是否安装ssh服务,可以通过如下命令进行:

  • 1、先停掉SSH (opens new window)服务:sudo stop ssh
  • 2、卸载openssh (opens new window)-server:apt-get >remove openssh-server
  • 3、卸载openssh-client: apt-get remove openssh-server
  • 4、安装openssh-server:apt-get install openssh-server
  • 5、安装openssh-client:apt-get install openssh-client
  • 6、安装完成以后,启动服务:sudo /etc/init.d/ssh start
  • 7、启动后,查看服务是否正确启动: ps -e|grep ssh
  • 8、确认ssh-server已经正常工作: netstat -tlp

如果遇到,则先apt update一下

Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
 molly-guard monkeysphere ssh-askpass
The following NEW packages will be installed:
 openssh-server
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 377 kB of archives.
1
2
3
4
5
6
7
8
9

2.2 生成密钥 ssh-keygen 中间过程会提示你存放密钥的地方Enter file in which to save the key (/home/gavin/.ssh/id_rsa):选择默认目录好了,直接回车; 然后会提示Enter passphrase (empty for no passphrase): 设置一个进入私钥的密码,在后边导入id_rsaputtygen会用到,随便设置一个好了(不过自己要记住);

上述过程执行完毕后会生成两个文件,一个是id_rsa(私钥)一个是id_rsa.pub(公钥); 这里将公钥改名为authorized_keys

cd .ssh
mv id_rsa.pub authorized_keys
1
2

修改配置文件

sudo vi /etc/ssh/sshd_config
其中有这么一行`# AuthorizedKeysFile %h/.ssh/authorized_keys`,把前面的`#`去掉即可;
1
2

可以更改端口,更改后先stop停止服务,然后start就可以了

最后,应该是连接的时候了。请看如下命令:

$ ssh xxx@ip

启动、停止和重启SSH:

sudo /etc/init.d/ssh start

sudo /etc/init.d/ssh stop

sudo /etc/init.d/ssh restart

或者

sudo start ssh

sudo stop ssh

sudo restart ssh

卸载SSH

先停掉SSH服务:sudo stop ssh

然后:$ sudo apt-get –purge remove openssh-server
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

# 3.0 ssh连接原理

# 3.1、环境介绍

两台linux服务器

分别安装ssh服务,并启动

# 3.2、原理以及过程

  • 在A上使用ssh连接B机
  • A向B发送连接请求
  • B收到请求后,将自己的公钥发给A
  • A收到公钥后,用公钥加密B的登陆密码,生成加密密文,发送给B
  • B收到加密密文后,用自己的私钥解密,得到解密信息,然后与B的登陆密码做比较,正确则允许A登陆。

# 4.0 ssh免密登陆

# 4.1、环境介绍

  • A/B两台装有ssh的linux机器

  • 在A机器上生成秘钥对 Windows:ssh-keygen -t rsa -C "youremail@example.com"

  • 将A的公钥加入到B机器上指定位置(.ssh目录下的authorized_keys里)

    介绍一下A机器下~/.ssh/目录下的几个文件:

1、id_rsa         生成的秘钥` `
2、id_rsa.pub       生成的公钥` `
3、authorized_keys    存放远程连接主机的公钥,一行一个公钥,权限为600` `
4、know_hosts  (该文件不会立刻生成)存放被连接主机的公钥,下次连接时会核对公钥是否一致,若不一致,则发出相应的警报,作用是避免安全攻击,比如说DNS劫持等。
若发现异常冲突,只要删除know_hosts文件里冲突的公钥即可。
1
2
3
4
5
重启ssh
sudo service sshd restart
1
2

提示

经常把顺序混淆

  1. A和B都有id_rsaid_rsa.pub
  2. A连接B,就需要把B的公钥复制下来,放在A的authorized_keys

如果你现在以本地的root身份生成密钥并上传到服务器的话,你用root去SSH连接服务器的话是不需要密码的,但是别的用户连接是仍然需要密码的:

因为免密码登录的处理是用户对用户的,切换其他用户后,仍然需要输入密码,这个时候可以用别的用户再次生成密钥上传到服务器就行

  • 公钥传到远程机器并生效的操作,可用其他方式实现,如scp后修改authorized_keys。
  • 远程机器的.ssh目录需要700权限,authorized_keys文件需要600权限。

# 4.2、关于known_hosts

# 1. known_hosts中存储的内容是什么?

known_hosts中存储是已认证的远程主机host key,每个SSH Server都有一个secret, unique ID, called a host key

# 2. host key何时加入known_hosts的?

当我们第一次通过SSH登录远程主机的时候,Client端会有如下提示:

Host key not found from the list of known hosts.
Are you sure you want to continue connecting (yes/no)?
1
2

此时,如果我们选择yes,那么该host key就会被加入到Client的known_hosts中,格式如下:

# domain name+encryption algorithm+host key
example.hostname.com ssh-rsa AAAAB4NzaC1yc2EAAAABIwAAAQEA。。。
1
2
# 3. 为什么需要known_hosts?

最后探讨下为什么需要known_hosts,这个文件主要是通过Client和Server的双向认证,从而避免中间人(man-in-the-middle attack)攻击,每次Client向Server发起连接的时候,不仅仅Server要验证Client的合法性,Client同样也需要验证Server的身份,SSH client就是通过known_hosts中的host key来验证Server的身份的。

# 更多关于ssh参考 (opens new window)

# ssh原理 (opens new window)

上次更新: 2022/05/28 00:55:49
最近更新
01
忙着考研,网站图片https,cdn什么的过期了,考完再弄
07-14
02
OSS+CDN
09-23
03
Sparks fly
09-06
更多文章>
极昼青春
买辣椒也用券