30-SSH-telnet介绍
SSH协议
SSH协议概念:
SSH(Secure Shell)安全外壳协议,是一种建立在应用层基础上的安全协议,通过对密码进行加密传输验证,可以在不安全的网络服务中提供安全的传输环境,实现SSH客户端和SSH服务器端的连接,所以SSH是基于客户端-服务端模式。
ssh 用户名@远程主机IP :首次登陆需要下载对方公钥
示例:ssh root@192.168.0.1
-
SSH服务主要功能有哪些呢?
-
提供远程连接服务器的服务
-
对传输的数据进行加密
那么除了SSH协议能提供远程连接服务Telnet 也能提供远程连接服务,那么区别是什么呢?
-
-
ssh 服务会对传输数据进行加密,监听在本地22/tcp端口,ssh服务默认支持root用户登陆
-
telnet 服务不对数据进行加密,监听在本地23/tcp端口,telnet服务默认不支持root用户登陆
服务连接方式 | 服务数据传输 | 服务监听端口 | 服务登录用户 |
---|---|---|---|
ssh | 加密 | 22/tcp | 默认支持root用户登陆 |
telnet | 明文 | 23/tcp | 默认不支持root用户登陆 |
安装telnet服务:#默认不支持root登录所以需要使用普通用户登陆
[root@nfs sersync]# yum install -y telnet-server
[root@nfs sersync]# systemctl start telnet.socket
SSH相关命令
SSH有客户端与服务端,我们将这种模式称为C/S架构,ssh客户端支持Windows、linux、Mac等平台。在ssh客户端中包含ssh|slogin远程登陆、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。
#Windows连接linux
ssh -p22 root@10.0.0.61
-p #指定连接远程主机端口,默认22端口,可以省略
root #登陆用户,如果使用当前用户连接可以不指定用户
10.0.0.61 #远程主机服务器的IP地址
ssh root@10.0.0.41 2222 #指定端口远程连接
#linux服务器连接linux服务器
[root@web01 mnt]#ssh 10.0.0.31 #默认使用当前登录系统的用户登陆
[root@nfs ~]# ssh -p 2222 root@10.0.0.41 #指定端口登陆
scp复制数据到远程主机命令(全量复制)
参数:
#-P 指定端口,默认22端口可不写
#-r 表示递归拷贝目录
#-p 表示在拷贝文件前后保持文件或目录属性不变
#-l 限制传输使用带看(默认kb)
推:将本地/tmp/1.txt 推送到远端服务器10.0.0.31的/tmp目录,使用对端的root用户
[root@web01 tmp]#scp 1.txt root@10.0.0.31:/tmp
[root@web01 tmp]#scp -P22 -rp /tmp/2.txt root@10.0.0.31:/tmp
拉:将远端10.0.0.31服务器/tmp/1.txt文件拉取到本地/opt目录下
[root@web01 tmp]#scp -P22 root@10.0.0.31:/tmp/1.txt /opt
root@10.0.0.31's password:
1.txt 100% 0 0.0KB/s 00:00
[root@web01 tmp]#ll /opt/
total 0
-rw-r--r-- 1 root root 0 Apr 11 18:09 1.txt
限速:
scp -rp -l 8096 /opt1.txt root@172.16.1.31:/tmp
总结:
1.scp通过ssh协议加密方式进行文件或目录拷贝
2.scp连接时的用户作为拷贝文件或目录的权限
3.scp支持数据推送和拉取,每次都是全量拷贝,效率较低。
ssh秘钥远程连接
ssh远程连接两种方式:
方法1:基于用户名密码。类比刷卡输入密码
方法2:基于秘钥的方式。类比刷脸支付
默认情况下,通过ssh客户端命令登陆远程服务器,需要提供远程系统上的账号和密码,但是为了降低密码泄露的几率和提高登录的方便性,建议使用秘钥验证方式。
第一步:生成秘钥对 一把锁和一把钥匙
[root@backup ~]# ssh-keygen #一直回车直到结束
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AcDIPgRhz7FBQ6M1sL+MWAEoO3AHfbpWrRd1kdiKo2k root@backup
The key's randomart image is:
+---[RSA 2048]----+
|=*=#... o.o |
|=.@ @ .. o + |
|oB.= o ..o o |
|o +.. . =.. |
| ..o o +So |
|..o + E . |
|.. + . . |
| |
| |
+----[SHA256]-----+
[root@backup ~]# ll .ssh/
total 12
-rw------- 1 root root 1675 Apr 11 19:41 id_rsa #私钥
-rw-r--r-- 1 root root 393 Apr 11 19:41 id_rsa.pub #公钥
-rw-r--r-- 1 root root 687 Apr 11 17:49 known_hosts
第二步:将公钥传输至免密登陆的服务器(可以发给多个服务器)
[root@backup ~]# ssh-copy-id 172.16.1.31
或者
[root@nfs ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.1.31
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '172.16.1.31 (172.16.1.31)' can't be established.
ECDSA key fingerprint is SHA256:GAWmXX0BZ5r4u8uCuX5ofDsPUavm28NzJ5DIcfsu8IU.
ECDSA key fingerprint is MD5:65:3c:bd:66:0d:ba:33:56:38:16:8a:35:e8:82:31:0a.
Are you sure you want to continue connecting (yes/no)? 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
root@172.16.1.31's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '172.16.1.31'"
and check to make sure that only the key(s) you wanted were added.
#查看是否将公钥传输至目标服务器
[root@nfs ~]# ll .ssh/
total 8
-rw------- 1 root root 393 Apr 11 19:47 authorized_keys #拷贝到目标服务器会生成这样的文件
-rw-r--r-- 1 root root 178 Apr 11 17:49 known_hosts
[root@nfs ~]# cat .ssh/authorized_keys #公钥内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCzE8m9mvH1fXPIokN0ndvZO0wLqe30JJM8Rq7/CKjgI3GamusIJJfZ2ZB4yHEPJUEXHJbh07bHxD2vJddachF2yKHB12XQOItXm+Ll0N62MRK6IjWNKPdlV4fPJ+E1ar1c2ojzBwoasvzL2Zu9xpP2EVMxhMmbMtVyv5+6LpLZJRamZiJ7KTpTY+QJZ8URHp4R5CSDkwf+ukpytSkadniPPIscJwYDu2/aKvYJ1WxoEKRqgbSpQNtenVBv3Peu0yBCySB7tNma/3RAd96hF0O3r0zKQ5rFbVbPEPO+ExwkI1TdZ+IT8we/tXYsVdpSrC2C99Pu8uiRvzxeKzkjiAKl root@backup
#验证登陆:
[root@nfs ~]# ssh 10.0.0.31
The authenticity of host '10.0.0.31 (10.0.0.31)' can't be established.
ECDSA key fingerprint is SHA256:GAWmXX0BZ5r4u8uCuX5ofDsPUavm28NzJ5DIcfsu8IU.
ECDSA key fingerprint is MD5:65:3c:bd:66:0d:ba:33:56:38:16:8a:35:e8:82:31:0a.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.31' (ECDSA) to the list of known hosts.
通过免密直接在远程服务器上执行命令,命令必须在单引号''或“”里边:
[root@backup ~]# ssh 172.16.1.31 'touch test.txt'
ssh免秘钥连接案例(通过跳板机)
实现步骤:
1.xshell 生成秘钥对
xshell--工具--新建用户秘钥生成向导--下一步--下一步--输入用户秘钥的名称--完成--属性--公钥--复制公钥
2.把公钥传给跳板机
vim .ssh/authorized_keys(没有就手动创建,权限600)
使用xshell秘钥连接跳板机,提前关闭跳板机的密码验证
vim /etc/ssh/sshd_config
systemctl restart sshd
重新登陆跳板机
3.再在跳板机上生成密钥对
[root@nfs ~]# ssh-keygen
4.将跳板机秘钥对传给1.7和1.41
方法一:
ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7 #默认会在10.0.0.7家目录隐藏目录.ssh目录下生成authorized_keys文件
[root@web01 ~]#ll .ssh/
total 4
-rw------- 1 root root 390 Apr 12 18:30 authorized_keys
方法二:
1.拷贝跳板机.ssh/id_rsa.pub中的公钥
2.10.0.0.7 /root/.ssh目录下创建authorized_keys文件,粘贴公钥
3.authorized_keys文件赋权600
5.测试跳板机免密登陆。
免秘钥登陆出现无法登陆问题解决
如果正常配置之后还是出现了跳板机无法免秘钥登陆的情况,那么就需要检查每层目录的权限是否正确。
#切记一定不要使用-R递归修改root目录的权限和属主属组
/root/.ssh
1. .ssh目录必须是 700
2. root目录必须是 550
3. /根目录的权限必须是 555
4.authorized_keys 权限是 600
出现无法登陆问题解决
如果正常配置之后还是出现了跳板机无法免秘钥登陆的情况,那么就需要检查每层目录的权限是否正确。
#切记一定不要使用-R递归修改root目录的权限和属主属组
/root/.ssh
1. .ssh目录必须是 700
2. root目录必须是 550
3. /根目录的权限必须是 555
4.authorized_keys 权限是 600