RHEL8_Linux_ssh远程登录系统和远程拷贝

本章主要介绍ssh远程登录系统和远程拷贝的方法。

  • ssh的基本用法
  • ssh无密码登录和安全设置
  • ssh限制用户和其他设置
  • Windows远程登录
  • 远程拷贝
        很多时候服务器并没有显示器,我们也不可能每次都通过控制台去管理服务器,这时就需
要远程登录。远程登录到服务器可以通过Telnet或ssh的方式。但是用Telnet登录,整个过
程都是以明文的方式传输的,不安全。所以,建议使用ssh的方式来登录,因为ssh在整个连
接过程中,数据都是加密的。

1.ssh的基本用法

语法:ssh 主机名/ip (/是或者的意思)

1)这里 如果没有指定用什么用户连接,则以当前用户连接。当第一次远程连接到服务器时,要记录服务器的公钥指纹信息。
[root@node02 ~]# ssh 192.168.182.200
The authenticity of host '192.168.182.200 (192.168.182.200)' can't be established.
ECDSA key fingerprint is SHA256:3cMgI+7W8GELajR0KarNlwXEody8ngbF3uHaM9Nagvg.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.182.200' (ECDSA) to the list of known hosts.
root@192.168.182.200's password: 
        上面如果输入的是no,则连接终止。输入yes,则保存在了当前用户家目录下
的.ssh/known_hosts文件中。
        上面的命令中,我们并没有指定使用哪个用户连接到192.168.8.12,但它是以aaa用户
登录到192.168.182.200上的。
2)在node1上时没有aaa用户的
[root@node02 ~]# id aaa
id: “aaa”:无此用户
3)所以,输入密码都错误的。连续输入3次密码不正确就退出来,因为192.168.182.200上 根本没有aaa用户,但是有bbb用户,如下所示。

4)我们可以指定使用哪个用户名连接过去
语法:
  1. ssh 01 用户名 主机名 / IP
  2. ssh 用户名@主机名 / IP

建议使用第二个,现在以ccc的身份连接,命令如下

[bbb@node02 ~]$ ssh 192.168.182.200
bbb@192.168.182.200's password: 

[bbb@node02 ~]$ ssh ccc@192.168.182.200
ccc@192.168.182.200'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.com/
To register this system, run: insights-client --register

[ccc@red01 ~]$ 
5)现在可以看到,此时已经正常连接过去了,要是退出时只需要输入 “exit” 即可
[ccc@red01 ~]$ exit
注销
Connection to 192.168.182.200 closed.
[bbb@node02 ~]$ 
6)如果连接时出现了图所示的错误,口要把家目录下的 .ssh/known_hosts删除,或者把 此文件中192.168.182.200对应的条目删除即可

2.ssh无密码登录

ssh远程登录到服务器时有两种认证方式。

1)密码认证

前面在node02上通过ssh连接到node1时,这里需要输入密码才能正常登录,这种就是密码认证,命令如下。

[bbb@node02 ~]$ ssh ccc@192.168.182.200
ccc@192.168.182.200's password: 
2)密钥认证
        如果做了密钥认证,远程登录时不需要密码就可以直接登 录。这里 node02上的lbbb准备以ccc身份无密码连接到 node01
     1)   为了好描述,node02上的lbbb用户称为 bbb@node01上的 ccc用户称aaa@node01。 aaa@node01需要生成一个密钥对,命令如下。
[ccc@red01 ~]$ ssh-keygen -f ~/.ssh/id_rsa -N ""
Generating public/private rsa key pair.
Created directory '/home/ccc/.ssh'.
Your identification has been saved in /home/ccc/.ssh/id_rsa.
Your public key has been saved in /home/ccc/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Fp2oXmNQwMbUvcILBjTbZhU32PS+dSHAUkhXMjWXP/8 ccc@red01
The key's randomart image is:
+---[RSA 3072]----+
|   .o+oo=BB*o+ ..|
|    .++oo*+=+ o. |
|    .o=.o +... ..|
|     oooo...  ..o|
|     ...So  . . +|
|     . +..   o ..|
|      .     .   .|
|                E|
|                 |
+----[SHA256]-----+
[ccc@red01 ~]$
     2)   这条命令会生成一个密钥对(私钥和公钥),这里-f指定了生成私钥的路径和名称,如果 不指定,默认也是这个路径。-N后面的双引号中没有空格,意思是不对生成的私钥加密。 这样blab生成了自己的密钥对,存放在自己家目录的.ssh目录下,命令如下。
[ccc@red01 ~]$ ls .ssh/
id_rsa  id_rsa.pub
[ccc@red01 ~]$

其中id_rsa 时私钥,id_rsa_pub时公钥

3)然后通过ssh-copy-id把公钥的内容存储在 bbb@node02家目录下 的.ssh/authorized_keys文件中,如果没有此文件,拷贝过去之后会自动创建。

4)下面执行ssh-copy-id命令,命令如下。
[ccc@red01 ~]$ ssh-copy-id bbb@192.168.182.210
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ccc/.ssh/id_rsa.pub"
The authenticity of host '192.168.182.210 (192.168.182.210)' can't be established.
ECDSA key fingerprint is SHA256:vk0uj0tG0uSmMq2mMNwSlCIPyrY3fDHuX8DM0HP2WLE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
bbb@192.168.182.210's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'bbb@192.168.182.210'"
and check to make sure that only the key(s) you wanted were added.

[ccc@red01 ~]$ 

5)这样ccc的公钥就存放在bbb@node02的家目录下的.ssh/authorized_keys 文件中了

[bbb@node02 ~]$ cat .ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCnF1gOoFAUUhebTtRFBubJqkw8lXCR9Kap2ebw+LYhoKQp8g3DxLgMhma0IuTSHbbSqA+XwXuvnr9KOIMDUlhVB9gRXR6xGxn6qpAL94x++KX/p2N/eSjJRVRg6NO6QZo4RfBn4z0eerN/5urGlitWQPvGYSyDOXhqQH6U8znT+vn0JnTdIsZivtzIgGrW7Pk76PenKTM4uKnp9lK4GnxTCap1DYrFcFwmCv51lS7gZz+2LxRFbkM91/HAUvPePWFbvNS9AkyS++2J3r9CIJP9tkqe8INZOOTP3qCeu9fXJUip1aEINtVETDwUYEowgqZzxy/5LD9MOjK9uXzbc7eUvw/td/KpclrNmnSiwW5hLuqjH11TQemU3jGM7F/YdAms34CuMR527/o6vX/bJE0uhP+BIOKwYrdC2KAOXrYiCwsk7KDmZ0JYBgXry6wxR5nLJrRUyW9lnt01TvW+Mvkn6qUKrtSyEcvfkYCGgtCiS22uHj7Hw0tb32Gm+b2l97k= ccc@red01
[bbb@node02 ~]$
通过对比,发现这个文件内容就是ccc@node01的公钥内容。
6)下面远程登录测试。命令如下
[ccc@red01 ~]$ ssh bbb@192.168.182.210
Last login: Fri Dec  1 11:05:59 2023 from 192.168.182.1
[bbb@node02 ~]$ 

可以看到,已经无密码登录过去了。

3.ssh安全设置

        前面已经讲了,ssh有两种认证方式:密码认证和密钥认证。ccc@node01r到 bbb@node02用的是密钥认证,其他用户的登录方式仍然是密码登录,现在想设置只能用 其中一种认证,是否可以?答案是可以的。
1.禁止用密钥登录
1)在node02上,以 root用户编辑/etc/ssh/sshd_config,找到 PubkeyAuthentication, 修改内容如下。
2)将#PubkeyAuthentication yes修改为PubkeyAuthentication no(需要注意的是,这里前面的注释符#被删除了),这样就禁用了密钥登录,保存退出并重启sshd,命令如下。
[root@node02 ~]# systemctl restart sshd
3)此时已经禁用了密钥登录,只能密码登录,到node01上进程测试,这里只能使用密码登录,原来配置的密钥认证不再生效,命令如下
[ccc@red01 ~]$ ssh bbb@192.168.182.210
bbb@192.168.182.210's password: 
Last login: Fri Dec  1 12:05:55 2023 from 192.168.182.210
[bbb@node02 ~]$
4)再次设置允许密钥登录(PubkeyAuthentication yes),修改内容如下。
5)将PubkeyAuthentication no修改为PubkeyAuthentication yes,并重启sshd,命令如下。
[root@node02 ~]# systemctl restart sshd

2.禁用密码登录
     1)   在node02上,以root用户编辑/etc/ssh/sshd_config,找到PasswordAuthentication, 修改内容如下。
2)将PasswordAuthentication yes修改为PasswordAuthentication no,这样就禁用了密码登录,保存退出并重启sshd,命令如下。
[root@node02 ~]# systemctl restart sshd

此时只允许密钥登录,不允许密码登录。

3)为了测试方便,在node02上创建ddd用户,密码设置为123456
[root@node02 ~]# useradd ddd        //创建用户
[root@node02 ~]# echo 123456 | passwd --stdin ddd        //打印密码到ddd用户
更改用户 ddd 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@node02 ~]# 
4)在node01上进行验证,以bbb身份连接过去
[ccc@red01 ~]$ ssh bbb@192.168.182.210
bbb@192.168.182.210's password: 
Last login: Fri Dec  1 12:05:55 2023 from 192.168.182.210
[bbb@node02 ~]$ 
[bbb@node02 ~]$ 
[bbb@node02 ~]$ ssh bbb@192.168.182.210
The authenticity of host '192.168.182.210 (192.168.182.210)' can't be established.
ECDSA key fingerprint is SHA256:vk0uj0tG0uSmMq2mMNwSlCIPyrY3fDHuX8DM0HP2WLE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.182.210' (ECDSA) to the list of known hosts.
bbb@192.168.182.210: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[bbb@node02 ~]$

可以看到,使用bbb登录192.168.182.210时是可以无密码登录的。

5)然后以ddd身份连接过去
[ccc@red01 ~]$ ssh ddd@192.168.182.210
ddd@192.168.182.210: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[ccc@red01 ~]$ 
        因为我们并没有做bob用户无密码登录到node02,只能使用密码登录,而密码登录被禁用,
所以ddd登录失败。
6)自行设置允许密码登录,修改/etc/ssh/sshd_config,如下所示
7)将PasswordAuthentication no修改为PasswordAuthentication yes,并重启sshd,命令如下。
[root@node02 ~]# systemctl restart sshd
[root@node02 ~]# 
8)再次使用ddd用户登录,可以看到可以正常登录了。
[ccc@red01 ~]$ ssh ddd@192.168.182.210
ddd@192.168.182.210's password: 
Last failed login: Fri Dec  1 12:23:23 CST 2023 from 192.168.182.200 on ssh:notty
There was 1 failed login attempt since the last successful login.
[ddd@node02 ~]$

3.ssh限制用户

        对于服务器上的有效用户,基本上都是可以通过 ssh 连按过去的,但是有时为了安全性 要禁用某些用户登录,如禁用root等。

1.禁止root用户登录
1)默认情况下,是可以用root登录到远端服务器的
[root@red01 ~]# ssh root@192.168.182.210
The authenticity of host '192.168.182.210 (192.168.182.210)' can't be established.
ECDSA key fingerprint is SHA256:vk0uj0tG0uSmMq2mMNwSlCIPyrY3fDHuX8DM0HP2WLE.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.182.210' (ECDSA) to the list of known hosts.
root@192.168.182.210's password: 
Last failed login: Fri Dec  1 15:54:21 CST 2023 from 192.168.182.200 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri Dec  1 15:53:09 2023 from 192.168.182.1
[root@node02 ~]#

可以看到,root成功连接到了node02了

2)如果要禁用root用户登录,在node02用vim编辑器打开 /etc/ssh/sshd_config ,按如下内容修改。

3)将PermitRootLogin yes修改为PermitRootLogin no,保存退出并重启sshd。
[root@node02 ~]# systemctl restart sshd
4)此时就禁用root用户登录了,在node01上进行验证。
[root@red01 ~]# ssh root@192.168.182.210
root@192.168.182.210's password: 
Permission denied, please try again.
root@192.168.182.210's password:
提示被拒绝,是因为不允许root用户登录,按【Ctrl+C】组合键终止。
如果允许root用户登录,按如下内容修改,将PermitRootLogin no修改为PermitRootLogin yes,然后重启sshd 即可。
2.禁用普通用户登录
      1)  如果想禁用某普通用户,可以用DenyUsers选项实现,用法是打开/etc/ssh/sshd_config, 在任意一行添加 DenyUsers userX,就可以限制userX ssh登录了。如果需要在server2上禁 用bob用户ssh登录,可以用vim 编辑器打开/etc/ssh/sshd_config,在任意一行添加 DenyUsersbob,命令如下。
2)这里就是禁用bob用户ssh 登录,保存退出并重启sshd,
[root@node02 ~]# systemctl restart sshd
3)然后到server上进行测试,命令如下。
[root@node02 ~]# ssh bbb@192.168.182.210
bbb@192.168.182.210's password: 
Permission denied, please try again.
bbb@192.168.182.210's password:
提示被拒绝,是因为bob用户被限制登录了,按【Ctrl+C】组合键终止。
这里只是禁用了bob用户,并不影响其他用户登录。
类似的选项还有AllowUsers和 DenyGroups。
其中AllowUsers userX的意思是,只允许userX用户登录,不允许其他用户登录。
如果写成AllowUsers userX userY,意思是只允许userX和userY登录,不允许其他用户
登录。
拒绝优先

4.ssh其他设置

ssh的其他设置可以设置ssh的默认用户及解决ssh慢的问题。
1.设置ssh的默认用户
        前面讲了在使用ssh登录时,如果没有指定用户则使用当前用户登录。其实我们也是可以指定默认用户的,即ssh登录时如果没有指定用户,则使用默认用户登录。
1)下面进行一个练习,在bbb@node02家目录下的.ssh目录中创建config文件,内容如下.
[ccc@red01 ~]$ cat .ssh/config 
Host 192.168.182.210

User bbb 
[ccc@red01 ~]$ 
        这个设置的意思就是,当连接到192.168.26.102时,如果没有指定用户,则默认用的是tom用户。
2)需要注意的是,这里要把.ssh/config的权限改为644。
[ccc@red01 ~]$ chmod 644 .ssh/config
3)在node01上验证。
[ccc@red01 ~]$ ssh 192.168.182.210
Last failed login: Fri Dec  1 16:06:33 CST 2023 from 192.168.182.210 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Fri Dec  1 15:53:18 2023 from 192.168.182.1
[bbb@node02 ~]$
这里虽然没有指定用户名,但是可以看到是以tom身份连接。
        4)首次连接某台机器时,都会提示我们是否保存那台机器的公钥指纹信息,让我们输人 yes/no,这里必须输人yes。如果想默认输人yes,即自动输人ves,可以修改.ssh/config∙内 容如下。
[ccc@red01 ~]$ cat .ssh/config 
Host 192.168.182.210

User bbb 

Host *
   StrictHostKeyChecking no
[ccc@red01 ~]$
        上述加粗字是新增加的,Host后面的*是通配符,表示所有主机。整体的意思是不管连接到哪台主机都不会再提示 yes/no了。
5)验证命令如下。
[ccc@red01 ~]$ rm -rf .ssh/known_hosts 
[ccc@red01 ~]$ ssh 192.168.182.210
Warning: Permanently added '192.168.182.210' (ECDSA) to the list of known hosts.
Last login: Fri Dec  1 16:31:04 2023 from 192.168.182.200
[bbb@node02 ~]$
        这里先清除已经保存的记录,即删除.ssh/known_hosts,然后重新登录,可以看到现在已经不提示我们输入yes/no了。
2.解决 ssh 慢的问题
        有时我们在通过ssh登录到一台服务器时,连接的过程会比较慢,要等几十秒才能看到输入密码的提示。很多时候是因为系统自动去做反向解析,即把ssh 192.168.26.102中的192.168.182.210反向解析成主机名,才会导致ssh速度慢。
        为了防止出现这个问题,可以修改服务器上的配置。用vim编辑器打开/etc/ssh/sshd_config,找到UseDNS,进行如下修改。
将#UseDNS yes 修改为UseDNS no,这里同时把注释符#去掉了,然后重启sshd 即 可。

5.Windows远程登录

        很多时候服务器上安装的是 Linux系统,但我们平时用的笔记本电脑是Windows系统,
如果要使用Windows远程登录,只要在Windows上安装ssh客户端,就可以登录到远端的
Linux服务器了。Windows中常见的ssh客户端包括PuTTY、Xshell、SecureCRT 等。
        Windows中的这些客户端,大家根据自己的喜好自行下载使用即可。

6.远程拷贝

        有时我们需要远程拷贝一些文件,例如,把文件或目录从A机器拷贝到B机器上,这种情况下我们一般用scp或rsync。
1)scp或 rsync利用的是ssh建立的通道,然后把文件传输过去,scp的用法如下
scp  文件路径 用户名@ip:目标路径

##拷贝目录需要加上 -r 选项
        这里的意思是把本地的/opt/txt1文件拷贝到node02 IP这台机器的/opt 目录中。需要注
意的是,远程主机上目录的表示方式是“IP:目录”,冒号两边没有空格。如果拷贝目录需加
上选项。
2)先查看node02上 /opt 目录上的内容
[root@node02 ~]# ls /opt/
[root@node02 ~]# 
3)然后到node01上拷贝 /opt/txt1 到 node02上的 /opt 目录中
[root@red01 ~]# scp -r /opt/txt1 root@192.168.182.210:/opt/
root@192.168.182.210's password: 
[root@red01 ~]# 

        这样就把文件拷贝过去了,scp利用的是ssh建立的通道,如果没有指定使用哪个用户接到 192.168.182.210,则使用的是当前用户 root。

4)下面以bbb身份登录192.168.182.210并拷贝文件,命令如下。
[root@red01 ~]# scp /etc/hosts bbb@192.168.182.210:/opt
bbb@192.168.182.210's password: 
scp: /opt/hosts: Permission denied
[root@red01 ~]# 
        因为192.168.26.102上的tom用户对 /opt没有写权限,所以拷贝过去时出现了“Permission denied”这样的报错信息。
5)把目录/boot/grub2拷贝到node02上的/opt目录中,命令如下。
[root@red01 ~]# scp /boot/grub2/ 192.168.182.210:/opt
root@192.168.182.210's password: 
/boot/grub2: not a regular file
[root@red01 ~]# 
结果是没有拷贝过去,因为/boot/grub2是一个目录
6)拷贝目录需要加上r选项,这样就把该目录拷贝过去了。命令如下。
[root@red01 ~]# scp -r  /boot/grub2/ 192.168.182.210:/opt
7)到node02上查看,命令如下。
[root@node02 ~]# ls /opt
grub2  txt1
[root@node02 ~]# 
  • 22
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值