zoukankan      html  css  js  c++  java
  • linux sshd服务

    1、ssh介绍:
    SSH是secure shell protocol的简写,由IETF网络工作小组制定,在进行数据传输之前,SSH先对联机数据包通过加密技术进行加密处理,加密后再进行传输,确保传递的数据安全。
    默认状态下,SSH服务主要提供两个服务功能:一个是提供类似telnet远程连接服务器的服务,即ssH服务,另一个类似FTP服务端sftp-server,借助SSH协议来传输数据的,提供更安全的SFTP服务。
    提醒:ssh客户端还包含一个很有用的远程安全拷贝命令SCP,也是通过ssh协议工作的。
    ssh的工作机制大致是本地ssh客户端先发送一个连接请求到远程的ssh服务端,服务端检查连接的客户端发送到数据包和IP地址,如果确认合法,就会发送密钥给ssh给客户端,此时,客户端本地再将密钥发回给服务端,自此连接建立。

    ssh2同时支持RSA和DSA密钥,但是SSH1仅支持RSA密钥

    2、ssh服务认证类型:
    1)基于口令的安全认证:
    主机IP,端口号,用户名,密码
    2)基于密钥的安全验证
    密钥对验证SSH:
    ssh-keygen –t rsa/des
    指定密钥对位置,回车在宿主目录的.ssh/下
    设置私钥短语
    确认短语
    上传公钥到服务器,在服务器中导入公钥文本到“~/.ssh/authorized_keys该文件不能有写入权限”

    3、ssh客户端附带的远程拷贝scp命令
    scp的基本语法:
    推送文件到目标服务器:
    scp -P22 /etc/a.txt root@10.0.0.1:/tmp
    下载目标服务器文件到本地服务器:
    scp -P22 root@10.0.0.1:/tmp/a.txt /etc/
    拷贝目录:
    scp -P22 -r /etc/a.txt root@10.0.0.1:/tmp

    scp参数:
    -P 指定端口号,注意是大写的P
    -r 复制目录
    -p 拷贝过程中保持文件或目录的原始属性。

    scp是加密的远程拷贝,可以下载和上传文件和目录,但每次都是全量拷贝,它会在每次拷贝时把以前拷过的文件再拷贝一次,所以效率不高。

    4、基于SSH加密传输的SFTP
    sftp -oport=22 root@192.168.233.132
    put install.log 上传到对方服务器的家目录下,也可以指定目录
    get zhang.ch 下载到本地的家目录


    5、SSH配置参数
    1)服务监听设置
    Vim /etc/ssh/sshd_config
    Port 22 //监听端口,应做修改
    Protocol 2 //使用版本2更安全
    Listenaddress 0.0.0.0 //监听本地网卡地址,提高隐蔽性
    useDNS //禁用DNS反向解析,提高响应时间
    GSSAPIAuthentication no //解决SSH连接慢的问题
    2)用户登陆控制
    Vim /etc/ssh/ssh_config
    Permitrootlogin no //禁止root用户登陆,可普通用户登陆后SU到root
    Permitemptypasswords no //禁止空密码用户登陆
    Logingracetime 2m //登陆验证时间2分钟
    Maxauthtries 6 //链接最大重试次数
    AllowUsers yh1 yh2@172.16.8.8 //只允许yh1登陆yh2用户只能从指定地址登陆,多用户可用空格分隔。
    3)登陆验证方式
    Vim /etc/ssh/sshd_config
    Passwordauthentication yes //启用密码验证,相对安全较低
    Pubkeyauthentication yes //启用密钥对验证,安全较高
    Authorizedkeysfile .ssh/authorized_keys //指定公钥库数据文件
    4)使用SSH客户端程序
    Windows平台中可用puttyCN、winSCP、secureCRT图形工具。
    PuttyCN可下载zip免安全版网站:http://www.chiark.greenend.org.uk/
    winSCP可下载ZIP的中文版,网站:http://winscp.net/
    Linux平台可直接SSH远程登陆“ssh –p 22 zhang@172.16.8.8”接受RSA密钥保存到~/.ssh/known_hosts文件中,密码验证成功登陆。
    可使用SCP远程复制:scp zhang@172.16.8.8:/etc/passwd /root/pwd.txt复制到本地 scp –r /etc/vsftpd/ root@172.16.8.8:/opt 上传文件到服务器
    Sftp root@172.16.8.8 将登陆到服务器,可执行上传和下载。
    5)SSH连接慢的问题解决:
    useDNS //禁用DNS反向解析,提高响应时间
    GSSAPIAuthentication no //解决SSH连接慢的问题

    6、实现批量分发文件功能
    要求:用同一用户(sshuser)在所有服务器下实现从A服务器本地服务器分发数据到其他服务器上,并能远程执行命令。且不需要密码验证。
    步骤:
    # useradd sshuser
    # id sshuser
    uid=556(sshuser) gid=556(sshuser) 组=556(sshuser)
    # echo 123.com|passwd --stdin sshuser
    $ whoami
    sshuser
    #ssh-keygen -t dsa
    回车。。
    #ll -a ~/.ssh/
    总用量 16
    drwx------ 2 sshuser sshuser 4096 4月 3 23:23 .
    drwx------ 5 sshuser sshuser 4096 4月 3 23:23 ..
    -rw------- 1 sshuser sshuser 668 4月 3 23:23 id_dsa #私钥
    -rw-r--r-- 1 sshuser sshuser 599 4月 3 23:23 id_dsa.pub #公钥
    拷贝公钥到服务器上:
    #ssh-copy-id -i ~/.ssh/id_dsa.pub "-p 22 sshuser@192.168.233.132"
    YES回车并输入密码
    #ssh-copy-id -i ~/.ssh/id_dsa.pub "-p 22 sshuser@192.168.233.130"
    YES回车并输入密码

    发送到服务器后文件被改名authorized_keys放在.ssh下:
    $ ll -a .ssh/
    total 12
    drwx------ 2 sshuser sshuser 4096 Apr 3 23:31 .
    drwx------ 4 sshuser sshuser 4096 Apr 3 23:31 ..
    -rw------- 1 sshuser sshuser 599 Apr 3 23:31 authorized_keys

    编写脚本,批量分发文件:
    #!/bin/bash
    . /etc/init.d/functions
    for i in 130 132;do
    scp -P 22 -rp $1 sshuser@192.168.233.$i:~
    if [ $? == 0 ];then
    action "192.168.233.${i}分发文件成功!" /bin/true
    else
    action "192.168.233.${i}分发失败!" /bin/false
    fi
    done


    7、远程sudo的方法:
    visudo -c 检查语法
    visudo文档提示信息:
    # Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
    # You have to run "ssh -t hostname sudo <cmd>".
    #
    Defaults requiretty
    可以通过ssh -t hostname sudo <cmd> 执行命令
    也可以注销Defaults requiretty就可以远程执行sudo提取了


    scp -P22 -rp hosts sshuser@192.168.233.132:~ 先将文件拷贝到对方家目录
    hosts 100% 158 0.2KB/s 00:00
    $ ssh -p22 sshuser@192.168.233.132 sudo /bin/cp ~/hosts /etc/ 不能远程执行sudo命令,所以报错
    sudo:抱歉,您必须拥有一个终端来执行 sudo
    通过-t选项就可以通过SSH远程sudo提取执行命令了:
    $ ssh -t -p22 sshuser@192.168.233.132 sudo /bin/cp ~/hosts /etc/
    [sudo] password for sshuser:
    Connection to 192.168.233.132 closed.

    8、SSH批量分发与管理小结:
    1)利用root做SSH key验证
    简单,易用
    安全性差,同时无法禁止root远程连接
    2)利用普通用户做,先把分发到文件拷贝到服务器的家目录,然后sudo提前拷贝到服务器的对应权限目录
    安全,配置复杂
    3)同方案2,只是不用sudo,而是设置suid对固定命令提权。
    相对安全
    复杂,安全性较差,任何人都可以用suid权限的命令。

    企业级生产场景批量管理,自动化管理方案:
    1)最简单最常用ssh key,功能最强大,一般中小型企业用,50-100台
    2)门户级别流行的puppet批量管理工具,复杂
    3)saltstack批量管理工具,特点:简单,功能强大,配置复杂。

  • 相关阅读:
    ucoreOS_lab5 实验报告
    ucoreOS_lab4 实验报告
    ucoreOS_lab3 实验报告
    ucoreOS_lab2 实验报告
    Mac OSX(Mac OS10.11) 安装 pwntools 失败的最新解决方案
    [最全算法总结]我是如何将递归算法的复杂度优化到O(1)的
    ucoreOS_lab1 实验报告
    Mac下安装npm全局包提示权限不够
    【新特性速递】将纯色背景转换为内置主题!
    【新特性速递】回发时改变表格标题栏和数据!
  • 原文地址:https://www.cnblogs.com/zhangxinqi/p/6667088.html
Copyright © 2011-2022 走看看