ssh远程管理

Posted xmtxh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ssh远程管理相关的知识,希望对你有一定的参考价值。

服务应用:

    rsync
    nfs
    sersync
运维: 
    怎么连接服务器
        SSH
    怎么批量部署

1.SSH基本概述
SSH是Secure shell Protocol的简写
在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后进行数据传输,确保了传递的数据安全

1).远程连接方式有哪些
    talnet属于明文连接方式,监听在本地23/tcp端口
    ssh属于密文连接方式,监听在本地22/tcp端口

2).SSH远程连接与Telnet远程连接区别
    ssh服务是加密服务协议,telnet服务是非加密服务协议
    ssh服务默认支持root用户登录,telnet默认不支持root用户登录

3).SSH远程服务主要功能
    1.提供远程连接服务器的服务
    2.对传输的数据进行加密

4).具体应用
    telnet主要应用在内网,针对网络设备(路由器,交换机,防火墙)
    ssh针对服务器
 
    通过端口镜像抓其他交换机接口的包

 

案例:使用vireshark验证telnet明文传输与ssh加密传输
环境:
远程服务器:CentOS7.7 m01 10.0.1.71
客户端:windows 10 wrieshark

1.安装telnet-server,实现telnet服务
[root@m01 ~]# yum install -y telnet-server
[root@m01 ~]# systemctl start telnet.socket

2.创建普通用户,用来登录telnet

[root@m01 ~]# useradd oldboy
[root@m01 ~]# echo 123456 | passwd --stdin oldboy

测试服务器端口有没有开启
telnet 10.0.1.71 22
ss -Intup | grep 22
netstat -Intup
nmap -p 22 10.0.1.71
nc 10.0.1.71 22

ssh连接抓包结果

技术图片

 

 telnet抓包结果

技术图片

 

2.SSH相关命令
是一个典型的C/S架构

客户端:
    Linux 
        openssh-clients
        ssh命令
    Windows
        Xshell SecureCRT、Putty    
    
服务端
    openssh-server

配置文件

服务端:
[root@m01 ~]# rpm -qc openssh-server 
/etc/ssh/sshd_config
客户端:
[root@m01 ~]# rpm -qc openssh-clients 
/etc/ssh/ssh_config
客户端其他工具:
[root@m01 ~]# rpm -ql openssh-clients 
/usr/bin/scp     *****              --远程拷贝命令
/usr/bin/sftp                       --远程文件传输命令
/usr/bin/slogin                     --远程登录命令
/usr/bin/ssh      *****             --远程连接登录命令  
/usr/bin/ssh-copy-id  *****         --远程分发公钥命令  
[root@m01 ~]# rpm -ql openssh
/usr/bin/ssh-keygen  *****          --ssh秘钥生成工具

openssh软件分析
[root@m01 ~]# yum list openssh*
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
Installed Packages
openssh.x86_64                                                   7.4p1-21.el7                                    @anaconda
openssh-clients.x86_64                                           7.4p1-21.el7                                    @anaconda
openssh-server.x86_64                                            7.4p1-21.el7 

[root@m01 ~]# rpm -ql openssh-server 
/etc/ssh/sshd_config                --ssh服务配置文件
/usr/sbin/sshd                      --ssh服务进程启动命令

ssh客户端包含ssh以及像scp(远程拷贝)、slogin(远程登录)、sftp(安全FTP文件传输)等应用程序

1).ssh远程登录服务器命令
ssh -p22 oldboy@10.0.1.71 [commad]

# ssh命令 
# -p(小写),用于指定远程主机端口,默认22端口可省略
# oldboy@remotehost
# "@"前面为用户名,如果用当前用户连接,可以不指定用户
# "@"后面为要连接的服务器的IP

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

# scp命令 
# -p(大写)指定端口,默认22端口可不写
# -r 表示递归拷贝目录 
# -p 表示在拷贝文件前后保持文件或目录属性不变
# -l 限制传输使用带宽(默认kb)

推:PUSH,上传
# scp -P22 -rp /tmp/oldboy oldboy@10.0.1.71:/tmp
# /tmp/oldboy为本地的目录
# "@"前为用户名
# "@"后为要连接的服务器的IP
# IP后的:/tmp目录,为远端的目标目录
# 说明:以上命令作用是把本地/tmp/oldboy推送至远端服务器10.0.1.71的/tmp目录

拉:PULL,上传
# scp -P22 -rp root@172.16.1.51:/etc/passwd /tmp/
# 还可以将远端目录或文件拉取至本地
结论
1.scp通过加密进行远程拷贝文件或目录的命令
2.scp拷贝权限为连接的用户对应的权限
3.scp支持数据的推送和拉取,但每次都是全量拷贝,效率低下。

3).xftp远程数据传输命令
一般采用图形化界面实现

 

3.SSH连接方式

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

知道服务器的IP端口,账号密码,即可通过ssh客户端登录远程主机,远程主机联机过程中传输数据库都是加密的。

ssh -p22 root@10.0.1.51
Last login: Thu Jan 23 15:01:11 2020 from 10.0.1.1
[root@backup ~]# 

2).基于秘钥远程登录

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

技术图片

实验:
mo1 通过秘钥远程登录backup
实验步骤:

1.在m01上生成秘钥对,-t秘钥类型,-C描述信息
[root@m01 ~]# ssh-keygen -t rsa -C xiaoming@oldboyedu.com
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:  #再次确认密码,不建议设置,直接回车

命令执行后,一路回车到底

2.将公钥传到backup的~/.ssh/authorized_keys
//命令示例:ssh-copy-id [-i [identity_file]] [user@]machine
ssh-copy-id //命令
-i          //指定下公钥的路径
[user@]     //以什么用户身份进行公钥分发(root),如果不输入,表示以当前系统用户身份分发公钥
machine     //下发公钥至哪台服务器,填写远程主机IP地址
[root@m01 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@172.16.1.51 
[root@backup ~]# ls -a .ssh/

//不登录主机执行命令
[root@m01 ~]# ssh root@172.16.1.51 "free -m"
              total        used        free      shared  buff/cache   available
Mem:            972         103         774           7          94         748
Swap:          2047           0        2047

加个需求:
rsync服务器需用被nfs服务器通过ssh使用秘钥登录

1.在nfs服务器上生成密钥对
[root@nfs ~]# ssh-keygen -t rsa -C nfs
2.将nfs上的公钥分发到backup服务器上
[root@nfs ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.1.51

使用windows公钥登录服务器
1.使用Xshell生成密钥对
工具->新建用户密钥向导->下一步一直到用户密钥信息->修改密钥名称后,下一步到最后
2.将公钥传到需要登录的服务器上。
1)创建存放公钥的目录及文件

mkdir ~/.ssh
chmod 700 ~/.ssh
vim ~/.ssh/authorized_keys,将xshell生成的公钥复制进来,保存退出
chmod 600 ~/.ssh/authorized_keys

 

4.SSH访问控制

Port 6666                #变更SSH服务远程连接端口
ListenAddress 10.0.1.71  #绑定本地内网地址
PermtRootLogin           #是否允许root用户远程登录
PasswordAuthentication   #是否允许使用密码登录
UseDNS                   #是否进行dns反向解析,影响ssh连接效率参数
GSSAPIAuthentication     #是否进行认证,影响ssh连接效率参数

以上是关于ssh远程管理的主要内容,如果未能解决你的问题,请参考以下文章

如何管理在每个 git 版本中添加私有代码片段?

如何使用Android片段管理器传递变量[重复]

Android:使用支持片段管理器时复制片段

YASnippet - emacs 的代码片段管理工具

片段管理访问错误可见 return false

python代码实现远程ssh连接