admin管理员组

文章数量:1591210

9.2.3远程传输命令

      家里有2台电脑,一台是ubuntu虚拟机,另一台是rhel8虚拟机器,两台虚拟机都是通过桥接的方式(桥接方式就是虚拟机直接和路由器连接)上网。然后现在用ubuntu来使用sshd服务登录rhel8系统。

用ip addr命令查出unbunt的ip地址:192.168.1.40

用ip addr命令查出rhel8系统的ip地址:192.168.1.80

开始工作之前必须先保证两个机器都开启了sshd服务,首先在ubuntu上执行

ps -e | grep ssh

结果知识显示了ssh agent,没有显示sshd,所以根本就没有开启sshd服务,然后自己执行如下命令开启sshd服务,然后提示错误,说是根本没有这个服务,这个时候我意识到自己系统没有安装sshd服务,所以自己安装:

systemctl start sshd

然后自己执行如下命令来大胆地安装sshd服务(我的版本是ubuntu20.04):

sudo apt install sshd

接着自己可以正确执行下面的命令来开启sshd服务了:

systemctl start sshd

说明:网上其他地方说是用 sudo apt install openssh-service,但是我自己这个命令才可以用。

首先,在unbunt上执行如下指令来登录rhel8系统:

一、下面做几个实验,来验证自己的猜想。

客户端机(ubuntu系统,Ip:192.168.1.40),服务端机(rhel8系统,ip 192.168.1.38).

1.尝试通过修改服务器机的文件/etc/ssh/sshd_conf(ip地址是192.168.1.38),具体更改详细如下图红框内所示,然后执行systemctl restart sshd重启sshd服务

然后在另一个客户端机上执行命令登录上一个机器(ip 192.168.1.38),如下:

root@ubuntu:/home/r# ssh 192.168.1.38
root@192.168.1.38's password: 
Permission denied, please try again.
root@192.168.1.38's password: 
Permission denied, please try again.
root@192.168.1.38's password: 
root@192.168.1.38: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
root@ubuntu:/home/r# 

结论:在服务端机器上的 /etc/ssh/sshd_config文件中的PermitRootLogin 改为no后,然后客户端机利用root身份就不能登录了。但是如果以普通身份登录,还是可以的,如下:

r@ubuntu:~$ ssh 192.168.1.38
r@192.168.1.38's password: 
Activate the web console with: systemctl enable --now cockpit.socket

This system is not registered to Red Hat Insights. See https://cloud.redhat/
To register this system, run: insights-client --register

Last login: Wed Oct 18 09:20:09 2023 from 192.168.1.40
[r@localhost ~]$ 

接下来,尝试把客户机上的/etc/ssh/sshd_config文件中的 permitrootlogin选项后面改为yes,那么其他用户就可以以root用户身份登录了。登录命令如下:

[r@localhost ~]$  ssh root@192.168.1.40 -p 22

结果可以发现,顺利登录了。 

      这个实验就验证了/etc/ssh/ssh_config/中的PermitRootLogin选项,如果值是yes,那么客户端机可以以root身份登录,反之,则不可以。

        每次更改完毕之后,必须要在本地重启sshd服务才可以生效。

总结:

1.如果是虚拟机,那么要把虚拟机的连接网络的方式改为桥接(意思是虚拟机可以直接和外部路由器连接,和一台真实电脑一样)。然后配置好ip地址,网关,dns服务器,子网掩码(nmcli配置的时候ip地址后面加 /+数字  就是子网掩码,必须要对)。两台主机配置好后,只要主机可以相互通信,就可以启动sshd服务进行连接了。

2.自己尝试了下,有的帖子说必须设置虚拟机->编辑->虚拟网络编辑器中的vmnet0的桥接至本机的网卡。我自己尝试了下,不用设置这个也是可以连接的,具体时候,如果需要就设置这个,不需要设置就不设置了吧。

3.自己成功验证了/etc/ssh/sshd_config中的 permitrootlogin选项。两台电脑可以互访。

4.自己的笔记本电脑使用无线wifi网络时在不设置虚拟机的  /编辑/虚拟网络编辑器/vmnet0  的桥接模式中的桥接至无线网卡名时,开机后右上角的网络标志(三个电脑互相连接的那个图标)是灰暗标志,但是在使用无线网络设置桥接到无线网卡名称时候,就显示正常了,而且别的主机可以联通之该主机(使用无线wifi网路的主机,可以ping通)。而且可以使用sshd服务登录到那台机器。

5.用虚拟机vmware登录linux操作系统,虚拟网络编辑器里面的桥接选项中的网卡名称会影响上网的。实际访问中一定要设置好这个选项。刚才在自己的笔记本电脑中试了下,改变桥接到的网卡名称选项中,不重启电脑就可生效——多好。

二、安全密钥验证

1.设置服务端机器的  /etc/ssh/sshd_config 中的 passwordauthentication 的值为no。此时再用密码去登录服务端机器(ip addr:192.168.1.40),就会被阻止,如下所示:

[r@localhost ~]$ ssh 192.168.1.40
r@192.168.1.40: Permission denied (publickey).
[r@localhost ~]$ 

2.采用安全密钥验证来登录服务端机器

        客户端机器ip:192.168.1.38

        服务端机器ip:192.168.1.40

第一步:在客户端机生成本地秘钥:

ssh-keygen

第二步:把客户端机器的公钥拷贝到服务端机器:

ssh-copy-id 192.168.1.40

第三步:把服务端设置成不允许密码验证登录:

设置服务端的 /etc/ssh/sshd_config/  目录下的 passwordauthentication 的值设置为no。

注意:这步不能在第二步之前。如果这步在第二步之前,那么第二步会被拒绝,不成功。

第四步:直接登录服务端机器。发现不用密码即可登录。

注意:

1.在自己的机器上试了下,如果想要用root身份登录还是必须要把服务端的sshd_config文件中的 /etc/ssh/sshd_config中的passwordauthentication的值设置为 yes。否则无法登陆。不知道是不是自己是用非root身份添加的公钥呢?如果自己开始就用root身份在客户端添加公钥,是不是后续可以用root直接登录?是的,在服务器机器root身份登录的情况下,自己去操作完全是没有任何问题的,书上说的是正确的。而且如果能登录root的话,那么登录非root也不是问题。

2.在自己操作过程中,拷贝公钥的时候,一定要注意自己输入的是哪个用户的密码,比如出现如下句子,那么说明自己输入的是服务器端的root用户密码,到时候也是把秘钥拷贝给了root用户。

root@192.168.1.40's password:

3.安全密钥验证过程:       

ssh验证共有两种方法:

  1. ssh keys是ssh中基于密匙的安全验证,你可以通过创建私人密匙和公用密匙的方式来完成ssh keys方式的ssh登陆验证。
  2. 使用ssh远程登陆服务器有两种方式,一种是使用密码登陆,另一种是使用ssh key登陆

下面这个解释可能更加通俗一些:

SSH共有两种登录方式:
一、 口令验证登录 1. 服务器生成公钥和私钥。 2. 客户端发起连接请求,服务器将公钥发给客户端。 3. 客户端生成口令(服务器密码),并用服务器发来的公钥加密,发送给服务器。 4. 服务器通过私钥解密,拿到口令(服务器密码),如果正确则认证成功。 
二、密钥验证登录 1. 客户端生成公钥和私钥,将公钥提前部署在服务器上。 2. 客户端发起连接请求。 3. 服务器随机生成一个字符串,用本地的公钥加密,发送给客户端。 4. 客户端通过私钥解密,将解密后的字符串发送给服务器。 5. 服务器验证本地字符串和客户端发来的字符串的一致性,如果通过,则认证成功。

本文标签: 不间断Linuxsshd