300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 【笔记】SSH服务:基本概述 相关命令“ssh scp sftp” 验证方式 场景实践 安全优化

【笔记】SSH服务:基本概述 相关命令“ssh scp sftp” 验证方式 场景实践 安全优化

时间:2019-05-18 02:04:20

相关推荐

【笔记】SSH服务:基本概述 相关命令“ssh scp sftp” 验证方式 场景实践 安全优化

SSH服务

SSH基本概述

SSH是一个安全协议,在进行数据传输时,会对数据包进行加密处理,加密后在进行数据传输。确保了数据传输安全。那SSH服务主要功能有哪些呢?

1.提供远程连接服务器的服务

2.对传输的数据进行加密

那么除了SSH协议能提供远程连接服务,Telnet也能提供远程连接服务, 那么分别的区别是什么呢?

ssh服务会对传输数据进行加密, 监听在本地22/tcp端口, ssh服务默认支持root用户登录

telnet服务不对数据进行加密, 监听在本地23/tcp端口, Telnet默认不支持root用户登录

案例: 使用wireshark验证telnet明文传输与ssh加密传输

1.安装telnet服务并运行

[root@m01 ~]# yum install telnet-server -y

[root@m01 ~]# systemctl start telnet.socket

2.使用wireshark检测vmnet8网卡上telnet的流量

3.telnet是无法使用root用户登录Linux系统,需要创建普通用户

[root@nfs ~]# useradd ahui[root@nfs ~]# echo "1"| passwd --stdin ahui

4.使用普通用户进行telnet登录

5.搜索wireshark包含telnet相关的流量

6.使用wireshark分析ssh流量

SSH相关命令

SSH有客户端与服务端,我们将这种模式称为C/S架构,ssh客户端支持Windows、Linux、Mac等平台。

在ssh客户端中包含 ssh|slogin远程登陆、scp远程拷贝、sftp文件传输、ssh-copy-id秘钥分发等应用程序。

ssh远程登录服务器命令示例

ssh -p22 root@10.0.0.61# -p指定连接远程主机端口,默认22端口可省略# root@remotehost# "@"前面为用户名,如果用当前用户连接,可以不指定用户# "@"后面为要连接的服务器的IP

windows连接Linux服务器

   xshell    工具

   crt       工具

1)直接连接 默认是22端口 会弹出xshell的输入用户名和密码对话框

ssh 10.0.0.7

2)指定用户连接 指定用户名方式远程连接

ssh root@10.0.0.31

3)指定端口连接

ssh root@10.0.0.31 2222

Linux连接Linux服务器

1)默认远程连接

端口默认22

用户默认以当前登陆的系统用户为远程连接用户

如果当前nfs登陆是root 则 以验证10.0.0.7的root用户身份密码

[root@nfs ~]# ssh 10.0.0.7

2)指定用户名连接

[root@nfs ~]# ssh root@10.0.0.7

3)指定端口远程连接 -p2222

[root@web01 ~]# ssh -p2222 root@10.0.0.31

scp复制数据至远程主机命令(全量复制)

-P 指定端口,默认22端口可不写

-r 表示递归拷贝目录

-p 表示在拷贝文件前后保持文件或目录属性不变

-l 限制传输使用带宽(默认kb)

scp远程拷贝类似rsync

rsync  增量备份 推送目录加/ 表示目录下面的内容 不加/ 表示目录本身

scp    全量备份 加/和不加/ 都表示目录本身

1)将31的hosts拷贝到7的/root目录下 推送数据

默认以当前登陆系统用户作为远程验证用户

命令 源文件 目标地址

[root@nfs ~]# scp /etc/hosts 10.0.0.7:/root/root@10.0.0.7's password: hosts 100% 158 179.9KB/s 00:00

推送多个文件

[root@nfs ~]# scp /etc/hosts /etc/passwd 10.0.0.7:/root/

推送ahui目录下所有的文件

[root@nfs ~]# scp /ahui/* 10.0.0.7:/root/

2)将7的/root目录下的hosts文件下载到本地的/opt目录下 下载数据

[root@nfs ~]# scp 10.0.0.7:/root/hosts /opt/root@10.0.0.7's password: hosts 100% 158 170.3KB/s 00:00

3)推送或者下载文件不需要使用参数 直接使用scp

推送目录使用-r参数

[root@nfs ~]# scp -r ahui/ 10.0.0.7:/rootroot@10.0.0.7's password: 1.txt 100% 21.7KB/s 00:00 [root@nfs ~]#

注意: 如果目录下多个小文件 建议先打包在scp

[root@nfs ~]# tar zcvf ahui.tar.gz ahui[root@nfs ~]# lltotal 48drwxr-xr-x 2 root root 24576 Jun 13 10:05 ahui-rw-r--r-- 1 root root 7322 Jun 13 10:05 ahui.tar.gz[root@nfs ~]# scp ahui.tar.gz 10.0.0.7:/rootroot@10.0.0.7's password: ahui.tar.gz 100% 73224.8MB/s 00:00

拷贝单个文件使用scp命令

scp /etc/hosts 10.0.0.7:/opt/rsync -avz /etc/hosts 10.0.0.7:/opt/

使用scp指定端口传输-P2222

[root@web01 ~]# scp -P2222 /etc/hosts 10.0.0.31:/rootroot@10.0.0.31's password: hosts 100% 1581.4KB/s

示例:

#推:将本地/tmp/ahui推送至远端服务器10.0.0.61的/tmp目录,使用对端的root用户[root@m01 ~]# scp -P22 -rp /tmp/ahui ahui@10.0.0.61:/tmp#拉:将远程10.0.0.61服务器/tmp/ahui文件拉取到本地/opt/目录下[root@m01 ~]# scp -P22 -rp root@10.0.0.61:/tmp/ahui /opt/#限速[root@m01 ~]# scp /opt/1.txt root@172.16.1.31:/tmproot@172.16.1.31 password: test 100% 656MB '83.9MB/s' 00:07 #限速为8096kb,换算为MB,要除以 8096/8=1024KB=1MB[root@m01 ~]# scp -rp -l 8096 /opt/1.txt root@172.16.1.31:/tmproot@172.16.1.31s password: test 7% 48MB '1.0MB/s' 09:45

结论:

1.scp通过ssh协议加密方式进行文件或目录拷贝。

2.scp连接时的用户作为为拷贝文件或目录的权限。

3.scp支持数据推送和拉取,每次都是全量拷贝,效率较低。

Sftp远程数据传输命令

#默认可以通过sftp命令连接sftp服务sftp root@10.0.0.61sftp -oPort=52113 root@10.0.0.61 #sftp的特殊端口连接# sftp使用get下载文件至于本地服务器sftp> get conf.txt /tmp/# sftp使用put上传本地服务器文件至远程服务器sftp> put /root/t1.txt /root/

SSH验证方式

1.基于账户密码远程登录

知道服务器的IP端口,账号密码,即可通过ssh客户端命令登陆远程主机。

➜ ~ ssh -p22 root@10.0.0.61root@10.0.0.61 password:[root@m01 ~]#

2.基于秘钥远程登录

默认情况下,通过ssh客户端命令登陆远程服务器,需要提供远程系统上的帐号与密码,但为了降低密码泄露的机率和提高登陆的方便性,建议使用密钥验证方式。

1).在服务器上生成非对称密钥,使用-t指定密钥类型, 使用-C添加描述

[root@m01 ~]# ssh-keygen -t rsa -C xxxx...#默认一路回车即可...

2).将A服务器上的公钥推送至B服务器

命令示例:

ssh-copy-id [-i [identity_file]] [user@]machine

ssh-copy-id #命令

-i         #指定下发公钥的路径

[user@]   #以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥

machine   #下发公钥至那台服务器, 填写远程主机IP地址

分发秘钥,[将A服务器的公钥写入B服务器~/.ssh/authorized_keys文件中]

[root@m01 ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.41

3).A服务器连接B服务器是无需密码的,如果能直接连接无需密码则表示秘钥已配置成功

远程登录对端主机方式

[root@m01 ~]# ssh root@172.16.1.41[root@nfs ~]#

不登陆远程主机bash,但可在对端主机执行命令

[root@m01 ~]# ssh root@172.16.1.41 "hostname -i"172.16.1.41

SSH场景实践

windows免密链接linux

1.windows客户端使用Xshell生成秘钥对,并下发公钥至跳板机

1)Xshell–>选择工具->新建密钥生成工具

2)生成公钥对,选择下一步

3)填写秘钥名称。秘钥增加密码则不建议配置

4)Windows会提示密码,继续即可

5)生成秘钥后,点击Xshell->工具->用户秘钥管理者->选择对应秘钥的属性

6)选择对应秘钥的公钥,将其复制

7)将从WIndows下复制好的公钥粘贴至跳板机~/.ssh/authorized_keys中,然后测试

[root@m01 ~]# cd ; umask 077; mkdir -p .ssh ;cd .ssh[root@m01 .ssh]# vim authorized_keys #添加windows公钥

2.在windwos测试前: 修改跳板机的SSH服务配置

[root@m01 ~]# vim /etc/ssh/sshd_configPermitRootLogin no# 关闭root登陆...PasswordAuthentication no # 关闭密码验证仅秘钥登录...

3.将密钥对中的公钥(锁)复制到跳板机

-----------------------------------------------手动创建方式---------------------------------

1)通过ahui用户远程登陆到系统中

2)在家目录创建.ssh隐藏目录 mkdir /root/.ssh

[ahui@m01 ~]$ chmod 700 .ssh[ahui@m01 ~]$ ll -d .sshdrwx------ 2 ahui ahui 29 Jun 13 11:35 .ssh

3)编辑.ssh下的认证文件/home/ahui/.ssh/authorized_keys

将windows的公钥复制到这个文件

4)修改权限为600

[ahui@m01 ~]$chmod 600 .ssh/authorized_keys

5)测试windows连接150是否能正常连接

1.检查秘钥是否正确

2.ssh/authorized_keys 这个验证文件名称必须正确的

3.检查文件权限是否600

4.检查目录的权限700

5.检查/root目录的权限为550 属主属组root

-------------------------------------------------手动创建方式-------------------------------

比较简单的方式将windows的公钥 放到10.0.0.150的ahui普通用户的严重文件中

[ahui@m01 ~]$ ssh-keygen # 生成密钥对 会自动创建.ssh 并且权限是700

将公钥复制到认证文件

[ahui@m01 ~]$ vim .ssh/authorized_keys

修改文件权限为600

[ahui@m01 ~]$ chmod 600 .ssh/authorized_keys

Linux通过秘钥连接Linux服务器

10.0.0.150远程连接10.0.0.7

第一步: 10.0.0.150 需要生成秘钥对 创建一把锁和钥匙

[root@m01 ~]# ssh-keygen -t rsa -C 593528156 # 一路回车........[root@m01 ~]# ssh-keygen # 可以省略 -t 和-C参数 直接一路回车

在家目录的.ssh隐藏目录下生成了密钥对

[root@m01 ~]# ll .ssh/total 12-rw------- 1 root root 1679 Jun 13 10:32 id_rsa #私钥-rw-r--r-- 1 root root 391 Jun 13 10:32 id_rsa.pub #公钥

第二步: 将公钥发送到10.0.0.7服务器

通过命令将公钥拷贝到10.0.0.7 输入root的密码

[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub 10.0.0.7

在服务端查看:

[root@web01 ~]# ll .ssh/total 8-rw------- 1 root root 391 Jun 13 10:35 authorized_keys-rw-r--r-- 1 root root 178 Jun 13 09:37 known_hosts[root@web01 ~]# cat .ssh/authorized_keys ssh-rsa ....

第二种方案: 复制公钥文件中的内容 到10.0.0.7的认证文件中

认证文件默认没有 需要手动创建

[root@web01 ~]#vim /root/.ssh/authorized_keysssh-rsa ....[root@web01 ~]# ll .ssh/total 8-rw------- 1 root root 391 Jun 13 10:35 authorized_keys

第三步: 远程登陆测试 不需要输入用户名和密码 免密连接

[root@m01 ~]# ssh 10.0.0.7Last login: Mon Jun 13 09:36:06 from 10.0.0.150[root@web01 ~]#

跳板机将公钥分发到后端内网主机:

第一种方案:

[ahui@m01 ~]$ ssh-keygen # 生成密钥对[ahui@m01 ~]$ ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.7

远程连接: 只能在ahui用户下 远程面面连接 172.16.1.7

[ahui@m01 ~]$ ssh root@172.16.1.7Last login: Mon Jun 13 10:46:35 from 10.0.0.150[root@web01 ~]#

第二种方案: 通过root用户跳转到后端内网主机

[ahui@m01 ~]$ su - root# 提权切换到root用户 root密码 Password: Last login: Mon Jun 13 12:01:36 CST on pts/2

生成密钥对:

[root@m01 ~]# ssh-keygen # 一路回车 如果有会提示是否覆盖

下发秘钥到172.16.1.7和200的root用户下

[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.1.7[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub 172.16.1.200

测试远程连接: 150连接172.16.1.7

[root@m01 ~]# ssh 172.16.1.7Last login: Mon Jun 13 12:11:26 from 172.16.1.150[root@web01 ~]# [root@m01 ~]# ssh 172.16.1.200Last login: Mon Jun 13 12:06:20 from 172.16.1.31

SSH安全优化

SSH作为远程连接服务,通常我们需要考虑到该服务的安全,所以需要对该服务进行安全方面的配置。

1.更改远程连接登陆的端口

2.禁止ROOT管理员直接登录

3.密码认证方式改为密钥认证

4.重要服务不使用公网IP地址

5.使用防火墙限制来源IP地址

SSH服务登录防护需进行如下配置调整,先对如下参数进行了解

Port 6666 # 变更SSH服务远程连接端口PermitRootLogin no# 禁止root用户直接远程登录PasswordAuthentication no# 禁止使用密码直接远程登录UseDNS no# 禁止ssh进行dns反向解析,影响ssh连接效率参数GSSAPIAuthentication no# 禁止GSS认证,减少连接时产生的延迟

将如下具体配置添加至/etc/ssh/sshd_config文件中,参数需根据实际情况进行调整

###SSH####Port 6666#PasswordAuthentication no#PermitRootLogin noGSSAPIAuthentication noUseDNS no###END###

免交互expect[扩展]

1.安装expect

[root@m01 ~]# yum install -y expect

2.编写expect脚本

#!/usr/bin/expectset ip 10.0.0.51set pass 123456set timeout 30spawn ssh root@$ipexpect {"(yes/no)" {send "yes\r"; exp_continue}"password:" {send "$pass\r"}}expect "root@*" {send "df -h\r"}expect "root@*" {send "exit\r"}expect eof免交互sshpass[扩展]

1.安装sshpass

[root@m01 ~]# yum install -y sshpass

2.使用sshpass命令

[root@m01 ~]# sshpass -p 123456 ssh root@10.0.0.51

[option]

-p:指定密码

-f:从文件中取密码

-e:从环境变量中取密码

-P:设置密码提示

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。