zoukankan      html  css  js  c++  java
  • SSH交互式脚本StrictHostKeyChecking选项 benchmode=yes

    SSH 公钥检查是一个重要的安全机制,可以防范中间人劫持等黑客攻击。但是在特定情况下,严格的 SSH 公钥检查会破坏一些依赖 SSH 协议的自动化任务,就需要一种手段能够绕过 SSH 的公钥检查。

    什么是SSH公钥检查
    SSH 连接远程主机时,会检查主机的公钥。如果是第一次该主机,会显示该主机的公钥摘要,提示用户是否信任该主机:

    The authenticity of host '10.0.0.1 (10.0.0.1)' can't be established.
    ECDSA key fingerprint is 91:63:21:08:4a:96:23:5b:f6:98:c9:a8:cd:cb:8b:91.
    Are you sure you want to continue connecting (yes/no)?

    当选择接受,就会将该主机的公钥追加到文件 ~/.ssh/known_hosts 中。当再次连接该主机时,就不会再提示该问题了。

    如何去掉公钥确认?
    在首次连接服务器时,会弹出公钥确认的提示。这会导致某些自动化任务由于初次连接服务器而任务中断。或者由于~/.ssh/known_hosts 文件内容清空,导致自动化任务中断。 SSH 客户端的 StrictHostKeyChecking 配置指令,可以实现当第一次连接服务器时,自动接受新的公钥。只需要修改 /etc/ssh/ssh_config 文件,包含下列语句:

    Host *
    StrictHostKeyChecking no

    或者在 ssh 命令行中用 -o 参数

    $ ssh -o StrictHostKeyChecking=no 10.0.0.1
    ---------------------

    1: 当通过ssh连接远程服务器的时候,可能会出现以下繁琐场景,需要手工输入yes:

    ssh username@ip

     这对于某些分布式集群来说是不行的,甚至导致集群都不能启动成功,对于像pssh,pscp这样的自动化工具来说,也不希望这一步的验证,如何在连接的时候不提示这个信息呢:

    1
    方法1、ssh -o "StrictHostKeyChecking no" username@hostname<br>方法2:修改/etc/ssh/ssh_config,在文件最后添加 StrictHostKeyChecking no,接着重启ssh服务

    2:远程执行服务器上面的命令可以通过sshpass(当集群机器之间没有免密的时候),如果没有安装,,执行  yum install sshpass -y

    用法:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@test ~]# sshpass -h
    Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters
       -f filename   Take password to use from file        -----指定一个文件,从文件中读取密码
       -d number     Use number as file descriptor for getting password
       -p password   Provide password as argument (security unwise)   ----命令行直接输入密码,不安全
       -e            Password is passed as env-var "SSHPASS"         -----通过设置环境变量SSHPASS来保存密码
       With no parameters - password will be taken from stdin
     
       -P prompt     Which string should sshpass search for to detect a password prompt
       -v            Be verbose about what you're doing
       -h            Show help (this screen)
       -V            Print version information
    At most one of -f, -d, -p or -e should be used

    Eg:

    (1)使用 -f

    1
    2
    3
    4
    [root@test ~]# sshpass -f passwd.txt ssh root@192.168.0.235 "free -m"
                  total        used        free      shared  buff/cache   available
    Mem:          96405       27169       12563        4066       56672       63775
    Swap:           126          19         107

    (2)使用 -p 

    1
    2
    3
    4
    [root@test ~]# sshpass -p "mypasswd" ssh root@192.168.0.235 "free -m"  
                  total        used        free      shared  buff/cache   available
    Mem:          96405       27168       12584        4066       56652       63777
    Swap:           126          19         107  

    注:生产环境不要使用这种方式,不安全

    (3)使用 -e

    1
    2
    3
    4
    5
    6
    7
    [root@test ~]# export SSHPASS="mypasswd"
    [root@test ~]# echo $SSHPASS
    mypasswd
    [root@test ~]# sshpass -e ssh hduser@192.168.0.235 "free -m"
                  total        used        free      shared  buff/cache   available
    Mem:          96405       27209       12561        4066       56634       63735
    Swap:           126          19         107  

    当然,这种方式只针对当前shell有用,如果要配置永久生效,请修改/etc/profile文件

    (4)sshpass、ssh都支持多命令调用,只要在命令之间使用&&号就行。

    1
    2
    3
    4
    5
    6
    7
    8
    [root@test ~]# sshpass -e ssh -l root -o 'StrictHostKeyChecking no' 192.168.4.50  ls /home && free -m
    hadoop
    mysql
    yjt
    zbc
                  total        used        free      shared  buff/cache   available
    Mem:            977         364          95          49         518         366
    Swap:          4095          35        4060

      

    3、如果想要远程机器调用本地脚本,那么可以如下实现

    (1)ssh方式

    1
    2
    [root@test ~]# ssh -l root -o 'StrictHostKeyChecking no' 192.168.4.50 bash -s < test46.sh
    runstone.com

    (2)sshpass方式

    1
    2
    [root@test ~]# sshpass -e ssh -l root -o 'StrictHostKeyChecking no' 192.168.4.50 bash -s < test46.sh
    runstone.com

    4、支持sudo

          有些命令需要权限才行,当不想重复输入密码的时候,可以通过这种方式。

    (1)格式:cmd ---> 'echo password | sudo -S cmd'

             eg:

    1
    [root@test ~]# sshpass -p 123456 ssh  -o 'StrictHostKeyChecking no' yjt@192.168.4.50  'echo 123456 | sudo -S  mkdir /backup'

      注:-S的意思是从标准输入读取密码

          对于echo,dd等命令,可能会出现权限不够问题,如:

    1
    2
    [root@test ~]# sshpass -p 123456 ssh  -o 'StrictHostKeyChecking no' yjt@192.168.4.50  'echo 123456 | sudo -S  echo hello > /backup/file'
    bash/backup/file: Permission denied

           对于上述方式,解决办法如下:

    (2)格式:cmd ---> 'echo password | sudo -S  sh/bash -c "cmd"'

             eg:

    1
    root@test ~]# sshpass -p 123456 ssh  -o 'StrictHostKeyChecking no' yjt@192.168.4.50  'echo 123456 | sudo -S bash -c "echo hello > /backup/file"'
  • 相关阅读:
    根据进程id pid 查容器id
    jenkins 持续集成笔记1 --- 安装配置
    PMM 监控 MySQL 使用钉钉告警
    PMM 监控 MySQL
    docker HealthCheck健康检查
    顶层const和底层const
    Windows下使用VS2017搭建FLTK开发环境
    解决FAT32格式U盘安装win10时0x8007000D错误
    在VS中为C/C++源代码文件生成对应的汇编代码文件(.asm)
    VS2017设置主题和代码字体
  • 原文地址:https://www.cnblogs.com/klb561/p/11013774.html
Copyright © 2011-2022 走看看