全屋定制加盟哪个品牌好星链seo管理
本章主要介绍ssh远程登录系统和远程拷贝的方法
- ssh的基本用法
- 打开远程图形化界面
- ssh无密码登录和安全操作
- Windows远程登录
- 远程拷贝
很多时候服务器并没有显示器,我们也不可能每次都通过控制台去管理服务器,这时就需 要远程登录。远程登录到服务器可以通过Telnet或ssh的方式。但是用Telnet登录,整个过 程都是以明文的方式传输的,不安全。所以,建议使用ssh的方式来登录,因为ssh在整个连 接过程中,数据都是加密的
实验拓扑两台Linux操作系统
redhat8和node1
redhat中有aaa用户和jin用户,node1中只有jin用户
1.1 ssh的基本用法
ssh的基本用法1:
ssh 主机名 /IP
这里如果没有指定用什么用户连接,则以当前用户连接
当第一次远程连接到服务器时,要记录服务器的公钥指纹信息
[root@redhat8 ~]# ssh 192.168.161.12
上面如果输入的是no,则连接终止。输入yes,则保存在了当前用户家目录下 的.ssh/known_hosts文件中
如果使用aaa用户进行登录,连续输入3次密码不正确就会退出了,因为192.168.161.12上没有aaa用户,但是有jin用户
ssh的基本用法2:
1. ssh 0l 用户名 主机名 /IP
2. 用户名@主机名 /IP
建议用第2个。现在以jin的身份连接
[root@redhat8 ~]# ssh jin@192.168.161.12
jin@192.168.161.12's password:
[jin@node1 ~]$
可以看到,此时已经正常连接过去了,要退出来时只要输入“exit”即可
[jin@node1 ~]$ exit
登出
Connection to 192.168.161.12 closed.
[root@redhat8 ~]#
1.2 打开远程图形化界面
当远程连接到远端机器时,例如,从 redhat8上通过jin用户连接到node1
[root@redhat8 ~]# ssh jin@192.168.161.12
jin@192.168.161.12's password:
Last login: Fri Dec 1 11:08:34 2023 from 192.168.161.16
[jin@node1 ~]$ firefox
Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Running without a11y support!
Error: no DISPLAY environment variable specified
[jin@node1 ~]$
然后执行firefox命令,出现了“Error: no DISPLAY environment variable specified”的错误提示。这是为什么呢?首先我们了解一下 Xserver和 Xclient
每个打开的图形化界面的工具,例如,终端、 Firefox浏览器、gedit记事本等,这些都叫作 Xclient,这些Xclient必须在 Xserver上运行。 Xserver是一个平台环境,安装系统时如果选择 了图形化界面,那么Xserver就已经安装上去 了,如图
要是想在本机打开远端服务器的Xclient,即图形化客户端,需要满足以下3个条件
(1)通过ssh登录到服务器时,要加上-X(大写的X)选项
因为ssh建立的连接默认只允许字符传输,不允许Xclient进行传输,加上-X选项之后就可以 让Xclient通过ssh建立的连接传输
(2)本地要运行Xserver
(3)远端服务器要安装xorg-x11-xauth,默认是已经安装上去了的
现在退出来,重新通过ssh连接过去,加上-X选项,命令如下
[root@redhat8 ~]# ssh jin@192.168.161.12 -X
jin@192.168.161.12's password:
Last login: Fri Dec 1 11:16:30 2023 from 192.168.161.16
/usr/bin/xauth: file /home/jin/.Xauthority does not exist
[jin@node1 ~]$
1.3 ssh无密码登录
ssh远程登录到服务器时有两种认证方式
1.3.1 密码认证
前面在redhat8上通过ssh连接到node1时需要输入密码才能正常登录,这种就是密码认证
1.3.2 密钥认证
如果做了密钥认证,远程登录时不需要密码就可以直接登录
需要生成一个密钥对
[aaa@redhat8 ~]$ ssh-keygen -f ~/.ssh/id_rsa -N ""
Generating public/private rsa key pair.
Your identification has been saved in /home/aaa/.ssh/id_rsa.
Your public key has been saved in /home/aaa/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:D6UKYyQIyqkWhvPj3p+22Q4GppGHL+jYtKo+rt67O/g aaa@redhat8
The key's randomart image is:
+---[RSA 3072]----+
|. |
|=.. |
|==. . . |
|oo.= o |
|..* B S |
|.o O + . o |
|. * . + . |
|o*.= ..= |
|@**E*o=oo |
+----[SHA256]-----+
[aaa@redhat8 ~]$
这条命令会生成一个密钥对(私钥和公钥),这里-f指定了生成私钥的路径和名称,如果 不指定,默认也是这个路径。-N后面的双引号中没有空格,意思是不对生成的私钥加密
这样aaa生成了自己的密钥对,存放在自己家目录的.ssh目录下
[aaa@redhat8 ~]$ ls .ssh/
id_rsa id_rsa.pub known_hosts
[aaa@redhat8 ~]$
其中id_rsa是私钥,id_rsa.pub是公钥
然后通过ssh-copy-id把公钥的内容存储在jin@node1的家目录下的.ssh/authorized_keys文件中,如果没有此文件,拷贝过去之后会自动创建
[root@node1 ~]# ls .ssh
ls: 无法访问.ssh: 没有那个文件或目录
[root@node1 ~]#
下面执行ssh-copy-id命令
[aaa@redhat8 ~]$ ssh-copy-id jin@192.168.161.12
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/aaa/.ssh/id_rsa.pub"
/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
jin@192.168.161.12's password: Number of key(s) added: 1Now try logging into the machine, with: "ssh 'jin@192.168.161.12'"
and check to make sure that only the key(s) you wanted were added.[aaa@redhat8 ~]$
这样aaa的公钥就存放在jin@node1家目录下的.ssh/authorized keys文件中了
[jin@node1 ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDI3ngWP/jf8809s1EOyXI9CnLu92iYEfJqxvj09nvHDrEgUb4PT0+RLkys/sqzViYdtQvOKhGgXqCsU29PZZXNQPgisbF2+7w7H3XvOlSPH/3p0/9HgMHDghHOH3G6A/dMcqh+KRWcz/6U8wzNtk6TBcZL8ovT64erHigx/hMlgE0fP/fX6SnFUFgpFVUSGEAszxzl6oPkSXTITH2U8/1n3rZMNKL9GxPmFLMSg5e5VlJSCjOIxlzDePmgeGJkvEx79ZMqNzEJ4AFl7gkpCOmx1STe415lPFS2m+Xgvrvz0og12Ojy+9lTeIA1iFiDUZxP4GeUhMM9wHU6qfZbT2+uTxx/va+4pu6NEmzYb30VvmknMIaVU0fDwlW0WMhaawOVd7bYqF6MfhAnl191aYGy823N4rkvijIdAjlO5MitJNO8+6+9hhTDAV0TlycUL7KASzS13r6Kdq5yFP5aBBJ+TpoczJkjdXnQUGywRrUJ/xck5HJu+tlB9dF88g1NSSk= aaa@redhat8
[jin@node1 ~]$
通过对比,发现这个文件的内容就是 aaa@redhat的公钥的内容
下面远程登录测试
[aaa@redhat8 ~]$ ssh jin@192.168.161.12
Last login: Fri Dec 1 11:48:58 2023 from 192.168.161.1
[jin@node1 ~]$
可以看到,已经无密码登录过去了
1.4 ssh安全设置
前面已经讲了,ssh有两种认证方式:密码认证和密钥认证。aaa@redhat到jin@node1用的是密钥认证,其他用户的登录方式仍然是密码登录,现在想设置只能用 其中一种认证,是否可以?答案是可以的
1.4.1 禁用密钥登录
在node1中,以 root用户编辑/etc/ssh/sshd_config,找到 PubkeyAuthentication, 修改内容如下
将#PubkeyAuthentication yes修改为PubkeyAuthentication no(需要注意的是,这里 前面的注释符#被删除了),这样就禁用了密钥登录,保存退出并重启sshd
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
此时已经禁用了密钥登录,只能密码登录,到 redhat上进行测试
[aaa@redhat8 ~]$ ssh jin@192.168.161.12
jin@192.168.161.12's password:
Last login: Fri Dec 1 11:50:06 2023 from 192.168.161.16
[jin@node1 ~]$
这里只能使用密码登录,原来配置的密钥认证不再生效
再次设置允许密钥登录(PubkeyAuthentication yes),修改内容如下
将PubkeyAuthentication no修改为PubkeyAuthentication yes,并重启sshd,命令如下
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
1.4.2 禁止密码登录
在node1上,以root用户编辑/etc/ssh/sshd_config,找到PasswordAuthentication, 修改内容如下
将PasswordAuthentication yes修改为PasswordAuthentication no,这样就禁用了密 码登录,保存退出并重启sshd
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
此时只允许密钥登录,不允许密码登录
为了方便测试,在node1上创建用户bbb,密码设置为123.123
[root@node1 ~]# useradd bbb
[root@node1 ~]# echo 123.123 | passwd --stdin bbb
更改用户 bbb 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@node1 ~]#
在redhat上进行验证,首先以jin身份连接过去
[aaa@redhat8 ~]$ ssh jin@192.168.161.12
Last login: Fri Dec 1 11:55:51 2023 from 192.168.161.16
[jin@node1 ~]$
可以看到,使用tom登录192.168.26.102时是可以无密码登录的
然后以bbb身份连接过去
[aaa@redhat8 ~]$ ssh bbb@192.168.161.12
bbb@192.168.161.12: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
[aaa@redhat8 ~]$
因为我们并没有做bbb用户无密码登录到node1,只能使用密码登录,而密码登录被禁用, 所以bbb登录失败
自行设置允许密码登录,修改/etc/ssh/sshd_config
将PasswordAuthentication no修改为PasswordAuthentication yes,并重启sshd
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
再次使用bbb用户登录
[aaa@redhat8 ~]$ ssh bbb@192.168.161.12
bbb@192.168.161.12's password:
Last failed login: Fri Dec 1 12:07:28 CST 2023 from 192.168.161.16 on ssh:notty
There were 3 failed login attempts since the last successful login.
[bbb@node1 ~]$
已经可以正常登录了
1.5 ssh限制用户
对于服务器上的有效用户,基本上都是可以通过 ssh 连按过去的,但是有时为了安全性 要禁用某些用户登录,如禁用root等
1.5.1 禁用root用户登录
默认情况下,是可以用root登录到远端服务器的
[aaa@redhat8 ~]$ ssh root@192.168.161.12
root@192.168.161.12's password:
Last login: Fri Dec 1 11:01:05 2023 from 192.168.161.16
[root@node1 ~]#
如果要禁用root用户登录,在server2一用vim编辑哭打开/eto/ssh/sshd_config,按如下内容修改
将PermitRootLogin yes修改为PermitRootLogin no,保存退出并重启sshd
[root@node1 ~]# systemctl restart sshd
[root@node1 ~]#
此时就禁用root用户登录了,在redhat上进行验证
[aaa@redhat8 ~]$ ssh root@192.168.161.12
root@192.168.161.12's password:
Permission denied, please try again.
root@192.168.161.12's password:
提示被拒绝,是因为不允许root用户登录,按【Ctrl+C】组合键终止
如果允许root用户登录,将PermitRootLogin no修改为PermitRootLogin yes,然后重启sshd 即可
1.5.1 禁用普通用户登录
如果想禁用某普通用户,可以用DenyUsers选项实现,用法是打开/etc/ssh/sshd_config, 在任意一行添加 DenyUsers userX,就可以限制userX ssh登录了。如果需要在server2上禁 用bob用户ssh登录,可以用vim 编辑器打开/etc/ssh/sshd_config,在任意一行添加 DenyUsersbob,命令如下
这里就是禁用bob用户ssh 登录,保存退出并重启sshd,然后到redhat上进行测试
[aaa@redhat8 ~]$ ssh bbb@192.168.161.12
bbb@192.168.161.12's password:
Permission denied, please try again.
bbb@192.168.161.12's password:
提示被拒绝,是因为bbb用户被限制登录了,按【Ctrl+C】组合键终止
这里只是禁用了bbb用户,并不影响其他用户登录
类似的选项还有AllowUsers和 DenyGroups
其中AllowUsers userX的意思是,只允许userX用户登录,不允许其他用户登录
如果写成AllowUsers userX userY,意思是只允许userX和userY登录,不允许其他用户登录
如果以下两个条目同时出现:
则 DenyUsers生效,bob仍然是不能登录的
1.6 Windows远程登录
很多时候服务器上安装的是 Linux系统,但我们平时用的笔记本电脑是Windows系统, 如果要使用Windows远程登录,只要在Windows上安装ssh客户端,就可以登录到远端的 Linux服务器了。Windows中常见的ssh客户端包括PuTTY、Xshell、SecureCRT 等
Windows中的这些客户端,大家根据自己的喜好自行下载使用即可
1.7 远程拷贝
有时我们需要远程拷贝一些文件,例如,把文件或目录从A机器拷贝到B机器上,这种情 况下我们一般用scp或rsync
scp或 rsync利用的是ssh建立的通道,然后把文件传输过去,scp的用法如下
scp /path1/file1 remoteIP:/path2/
这里的意思是把本地的/path1/file1铂贝到remoteIP这台机器的/path2目录中。需要注意的是,远程主机上目录的表示方式是“IP:目录”,冒号两边没有空格。如果拷贝目录需加上选项
先查看node1上/opt目录中的内容
[root@node1 ~]# ls /opt/
[root@node1 ~]#
然后到redhat上拷贝 /etc/hosts到server2上的/opt目录中
[root@redhat8 ~]# scp /etc/hosts 192.168.161.12:/opt
root@192.168.161.12's password:
hosts 100% 158 78.6KB/s 00:00
[root@redhat8 ~]#
这样就把文件拷贝过去了,scp利用的是ssh建立的通道,如果没有指定使用哪个用户接到 192.168.161.12,则使用的是当前用户 root
下面以jin身份登录192.168.161.12并拷贝文件
[root@redhat8 ~]# scp /etc/hosts jin@192.168.161.12:/opt
jin@192.168.161.12's password:
scp: /opt/hosts: Permission denied
[root@redhat8 ~]#
因为192.168.161.12上的jin用户对/opt没有写权限,所有拷贝过去时出现了“Permission denied”这样的报错信息
把目录/boot/grub2拷贝到node1上的/opt目录中
[root@redhat8 ~]# scp /boot/grub2/ 192.168.161.12:/opt
root@192.168.161.12's password:
/boot/grub2: not a regular file
[root@redhat8 ~]#
结果是没有拷贝过去,因为/boot/grub2是一个目录,拷贝目录需要加上r选项
这样就把该目录拷贝过去了,到node1上查看
[root@node1 ~]# ls /opt/
grub2 hosts
[root@node1 ~]#
清空node1上/opt中的内容
[root@node1 opt]# rm -rf /*
[root@node1 opt]# ls
[root@node1 opt]#