ubuntu启用root用户并允许ssh远程登录
# Ubuntu启用root用户并允许ssh远程登录
# 1.0 Ubuntu启用root用户并允许ssh远程登录开启root账户
新装的linux系统是没有root用户的
# 1.1开启root账户
sudo passwd root #开启root用户
# 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
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服务
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_rsa到puttygen会用到,随便设置一个好了(不过自己要记住);
上述过程执行完毕后会生成两个文件,一个是id_rsa(私钥)一个是id_rsa.pub(公钥);
这里将公钥改名为authorized_keys:
cd .ssh
mv id_rsa.pub authorized_keys
2
修改配置文件
sudo vi /etc/ssh/sshd_config
其中有这么一行`# AuthorizedKeysFile %h/.ssh/authorized_keys`,把前面的`#`去掉即可;
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
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文件里冲突的公钥即可。
2
3
4
5
重启ssh
sudo service sshd restart
2
提示
经常把顺序混淆
- A和B都有
id_rsa和id_rsa.pub - 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的身份的。
